微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XF skiasharp 下载损坏的 PDF

如何解决XF skiasharp 下载损坏的 PDF

我想使用 Xamarin Forms 创建 PDF 报告。我曾尝试使用 skiasharp 插件创建示例 PDF。但我面临着奇怪的问题。

PDF 可以很容易地在移动设备(Android 10.0,API 29)中打开。但是,如果我尝试在笔记本电脑中打开相同的 PDF,则会显示错误消息,指出无法打开损坏的 PDF

此外,如果我们查看 PDF 的大小,它在设备中为 183 KB,在笔记本电脑中为 0KB。

代码

private void GenerateDocument()
        {
            try
            {
                var root = EnsureTempDataDirectory("CreatePdfSample");
                path = Path.Combine(root,$"{Guid.NewGuid():N}.pdf");
                
                if (!isSupported || (isSupported && File.Exists(path)))
                    return;

                var Metadata = new SKDocumentPdfMetadata
                {
                    Author = "Cool Developer",Creation = DateTime.Now,Creator = "Cool Developer Library",Keywords = "SkiaSharp,Sample,PDF,Developer,Library",Modified = DateTime.Now,Producer = "SkiaSharp",Subject = "SkiaSharp Sample PDF",Title = "Sample PDF",};

                var stream = SKFileWStream.OpenStream(path);
                var document = SKDocument.CreatePdf(path,Metadata);

                if (document == null)
                {
                    isSupported = false;
                    return;
                }

                var paint = new SKPaint
                {
                    TextSize = 64.0f,IsAntialias = true,Color = 0xFF9CAFB7,Isstroke = true,strokeWidth = 3,TextAlign = SKTextAlign.Center
                };

                var pageWidth = 840;
                var pageHeight = 1188;

                // draw page 1
                using (var pdfCanvas = document.BeginPage(pageWidth,pageHeight))
                {
                    // draw button
                    var nextPagePaint = new SKPaint
                    {
                        IsAntialias = true,TextSize = 16,Color = SKColors.OrangeRed
                    };
                    var nextText = "Next Page >>";
                    var btn = new SKRect(pageWidth - nextPagePaint.MeasureText(nextText) - 24,pageWidth,nextPagePaint.TextSize + 24);
                    pdfCanvas.DrawText(nextText,btn.Left + 12,btn.Bottom - 12,nextPagePaint);
                    // make button link
                    pdfCanvas.DrawLinkDestinationAnnotation(btn,"next-page");

                    // draw contents
                    pdfCanvas.DrawText("...PDF 1/2...",pageWidth / 2,pageHeight / 4,paint);
                    document.EndPage();
                }

                // draw page 2
                using (var pdfCanvas = document.BeginPage(pageWidth,pageHeight))
                {
                    // draw link destintion
                    pdfCanvas.DrawNamedDestinationAnnotation(SKPoint.Empty,"next-page");

                    // draw contents
                    pdfCanvas.DrawText("...PDF 2/2...",paint);
                    document.EndPage();
                }

                // end the doc
                document.Close();
            }
            catch (Exception ex)
            {

                throw;
            }
        }

对于示例,我参考了 github 上的 Skiasharp 示例。 任何帮助将不胜感激

编辑

因为我已经创建了名为 CreatePDFSample 的文件夹,所以文件的路径是

/Internal Storage/Download/CreatePdfSample/8c134318ca8d49f59d7a57e244845107.pdf

我现在注意到的另一件事,我创建的 10-12 个文件之一也在笔记本电脑中打开。它也在同一条路上。我不明白这里可能有什么问题。

谢谢

解决方法

我没有正确处理流。流的 using 关键字解决了这个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。