- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我遇到一些用 C# 编写的 Windows 应用商店应用程序的问题。
该应用程序加载一个在数据库中存储为字节数组的 PDF 文件,并尝试在其自己的 XAML View 中呈现图像对象中的第一页。代码如下:
PdfDocument _pdf = null;
#region Load PDF
using (InMemoryRandomAccessStream ms = new InMemoryRandomAccessStream()) {
await ms.WriteAsync(getPdfByteArrayFromDB().AsBuffer());
_pdf = await PdfDocument.LoadFromStreamAsync(ms);
}
#endregion
if (_pdf != null && _pdf.PageCount > 0)
{
PdfPage _page = _pdf.GetPage(0);
if (_page != null)
{
#region Render page
using (InMemoryRandomAccessStream ms = new InMemoryRandomAccessStream()) {
await _page.RenderToStreamAsync(ms);
BitmapImage bmi = new BitmapImage();
ms.Seek(0);
await bmi.SetSourceAsync(ms);
this.PdfPageImage.Source = bm;
}
#endregion
}
}
不幸的是,它呈现的是白色图像。我尝试通过编写一个将页面渲染为图像并读取它的临时文件来实现同样的目的。
#region Render page
StorageFile cachedPage = await ApplicationData.Current.TemporaryFolder
.CreateFileAsync("page.png", CreationCollisionOption.ReplaceExisting);
if (cachedPage != null)
{
IRandomAccessStream randomStream
= await cachedPage.OpenAsync(FileAccessMode.ReadWrite);
await _page.RenderToStreamAsync(randomStream);
await randomStream.FlushAsync();
randomStream.Dispose();
_page.Dispose();
BitmapImage bmi = new BitmapImage();
bmi.SetSource(await cachedPage.OpenAsync(FileAccessMode.Read));
this.PdfPageImage.Source = bmi;
}
#endregion
浏览临时文件夹,有与原始 PDF 大小相同的临时图像,它们只是白色图像。所以我尝试将存储的 PDF 写入临时文件。
#region Load PDF
StorageFile cachedPDF = await ApplicationData.Current.TemporaryFolder
.CreateFileAsync("myPdf.pdf", CreationCollisionOption.ReplaceExisting);
if (cachedPDF != null)
{
IRandomAccessStream randomStream = await cachedPDF.OpenAsync(FileAccessMode.ReadWrite);
await randomStream.WriteAsync(getPdfByteArrayFromDB().AsBuffer());
await randomStream.FlushAsync();
randomStream.Dispose();
_pdf = await PdfDocument.LoadFromFileAsync(cachedPDF);
}
#endregion
这两种呈现页面的方式都很好,因此存储的 PDF 很好,但尝试直接从内存流中读取字节数组时会出现问题。有没有一种方法可以在不编写任何临时文件的情况下呈现 PDF 页面?
非常感谢!
最佳答案
你必须倒回你的MemoryStream
。
using (InMemoryRandomAccessStream ms = new InMemoryRandomAccessStream()) {
await ms.WriteAsync(getPdfByteArrayFromDB().AsBuffer());
// The current position is at the end. Rewind to 0.
ms.Seek(0);
_pdf = await PdfDocument.LoadFromStreamAsync(ms);
}
我应该注意到,通过将它写入临时文件,您正在创建一个不需要倒带的新流,这就是它起作用的原因。
关于c# - WPF : PdfDocument not rendering,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22347771/
我对 PDFDocuments 有疑问。如何将 PdfDocument 对象的特定页面复制到另一个 PdfDocument 对象。 我尝试过使用 moveTo 方法,但它不起作用,我也尝试过使用 co
我有一个包含多个 PDF 的列表,我想将它们全部合并到一个 PdfDocument(我使用 iText),然后将这个 PdfDocument 转换成一个 ByteArrayOutputStream(或
我有一个 Windows 服务,可以即时合并 PDF,然后将它们移动到另一个位置。在大多数情况下,我无法控制某人想要合并的内容。碰巧经常会处理损坏的 PDF,因此创建新的 PdfDocument 会抛
我正在使用 Android 创建一个 Pdf 文件 PdfDocument类(class)。我从 XML 文件(ConstraintLayout 中的 LinearLayout)扩展布局,然后在运行时
我想使用 KitKat 中引入的 PdfDocument android 类从 View 生成 PDF 文件。我设法做到了,到目前为止文件生成正常,最终得到了正确的 PDF。唯一的问题是文件很大,一页
我正在使用 Android Studio 并尝试让我的应用生成 PDF。我已经设置了一个 Activity 来生成我希望我的 PDF 具有的内容。如果我让它显示在屏幕上,这很好用。 Activity
嘿,我已经在位图中转换了我的自定义 ListView 。我的位图的大小很大所以我想使用 PdfDocument 类在两个单独的 pdf 文件页面中打印该位图。我已经搜索过相同但没有得到适当的解决方案。
我目前正在尝试拆分 PDF 文件,然后保存每个文件 PdfDocument到一个新文件。问题是我找不到任何方法来附加新的 PdfWriter到现有 PdfDocument .这是我目前用来打开和拆分
我正在桌面和手持设备之间发送文档,并且我想向 PDF 添加元数据 header ,如下所示。 \n {"fileInfoEncodedInJson\": {"filename":"My Prin
因此,在我的应用程序中,我将图像上传到公司服务器 然后使用内置的 PDFdocument 方法将这些图像转换为 PDF, 现在我的问题是我试图通过添加 IF 语句来动态生成 PDF。因此,我的图像被加
我正在尝试编写一个简单的函数来获取 PDF 中的页数。我现在看到的每个代码示例似乎都无法使用 Swift 3,而且 Xcode 推荐的任何内容仍然不起作用。 func pageCount(filepa
我将 pdfdocument 添加到 PDFView 。但它显示出优势,也显示出慢跑。如何删除此边距。并且有什么方法可以将 pdfdocument 设置到左上角的位置。 最佳答案 我认为这有助于解决问
我遇到一些用 C# 编写的 Windows 应用商店应用程序的问题。 该应用程序加载一个在数据库中存储为字节数组的 PDF 文件,并尝试在其自己的 XAML View 中呈现图像对象中的第一页。代码如
我正在尝试使用 Android 原生 PdfDocument 类(来自 api 19)创建一个简单的 PDF 文档。我想要的是有一个 XML 布局文件,例如称为 pdf_doc.xml,然后在创建 P
在 PdfDocument.Page 上绘图时,我遇到了图像变大的问题。该应用程序适用于运行 Android 4.4.4(API 级别 19)的设备。 我正在生成一个 pdf 文档并添加一个图像,如下
PdfDocument document = new PdfDocument(); // crate a page description PageInfo pageI
我有一个 PDFDocument(当然由 PDFPages 组成),我需要一个 CGImageRef 来粘贴到我的 IKImageView 中。 目前,我从 PDFPage 获取数据表示,将其放入 N
有什么方法可以将空白页添加到现有的 PdfDocument 中吗?我创建了一个这样的方法: public void addEmptyPage(PdfDocument pdfDocument){
我在应用程序文档文件夹中存储了一个 PDF 文件。 我有一个 PDFView 作为我的 View Controller View 的 subview 。我可以从文件中加载 PDF 并显示它。没问题。
我正在使用 PDFKit 通过 pdfView.document = document 函数在 PDFView 中显示 PDF 文件。 问题在于,我也在使用 UIDocumentPicker API,
我是一名优秀的程序员,十分优秀!