【发布时间】:2017-08-05 18:54:50
【问题描述】:
我正在尝试打印使用 PrintManager 创建的 PDF 文件。我已经编写了代码以在我的活动中使用 ITextSharp 生成 PDF 文件。下面是我生成PDF的方法:
private byte[] generatePdf()
{
using (var baos = new MemoryStream())
{
using (var ps = new StreamWriter(baos))
{
Document doc = new Document(PageSize.A4, 72, 72, 72, 72);
PdfWriter writer = PdfWriter.GetInstance(doc, ps.BaseStream);
if (!doc.IsOpen())
doc.Open();
doc.AddTitle("Sales Order " + GlobalVars.selectedSales.DocumentNo);
var TitleFont = new Font(Font.FontFamily.TIMES_ROMAN, 24, Font.BOLD);
var SubTitleFont = new Font(Font.FontFamily.TIMES_ROMAN, 20);
var HeadingFont = new Font(Font.FontFamily.TIMES_ROMAN, 18, Font.BOLD);
var BoldNormalFont = new Font(Font.FontFamily.TIMES_ROMAN, 14, Font.BOLD);
var NormalFont = new Font(Font.FontFamily.TIMES_ROMAN, 14);
doc.Add(new Paragraph("SALES ORDER", TitleFont));
... //other data
doc.Close();
writer.Close();
}
var bytes = baos.ToArray();
return bytes;
}
}
简而言之,上面的代码将返回包含生成的 PDF 文件的字节数组,因为我不想将 PDF 保存在 Android 设备中的任何位置。
生成此 PDF 后,我无法使用 PrintManager,它只需要 PrintDocumentAdapter 参数来生成文件,而不是使用我生成的 PDF。我正在尝试生成从PrintDocumentAdapter 继承的CustomPrintAdapter,但不知道如何重用我从我的活动中创建的PDF,因为它使用PrintedPdfDocument 数据类型。
你们能给我指出正确的方向吗?或者有没有其他更简单的方法来实现打印自定义 PDF 文件?
更新 1
根据这篇文章,Xamarin Android 不支持 System.Drawing.dll。我认为 ITextSharp 库使用 System.Drawing 库,因为当我尝试构建它时,它会引发异常:
Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
Perhaps it doesn't exist in the Mono for Android profile?
当我删除它时,构建成功并且没有引发异常。请注意,我已尝试关闭解决方案,从 Packages 文件夹中删除所有内容,重新打开解决方案并构建;在这种情况下它不起作用。
因此,我将尝试使用 Android 开发者网站上的Android.Graphics.Canvas 生成 PDF。
【问题讨论】:
标签: c# android pdf xamarin printing