我正在使用iTextSharp
在c#中编写pdf文件。
我创建了一个ClassLibrary
项目并在Windows应用程序中引用。
dll实际上在调用时创建了一个pdf文件,但是当我打开pdf文件来查看它时There was an error opening this document. The file is damaged and could not be repaired.
这是我创建pdf文件的dll代码
public class Class1
{
public void CreatePDF()
{
// Orignal
string filename = "Desktop\\TEST_" + DateTime.Now.ToString("yyyyMMddhhmm") + ".pdf";
FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None);
Document doc = new Document(PageSize.A4, 10, 10, 10, 10);
doc.SetMargins(10, 10, 10, 10);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
doc.NewPage();
BaseFont bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false);
iTextSharp.text.Font times = new iTextSharp.text.Font(bfTimes, 9, iTextSharp.text.Font.ITALIC, iTextSharp.text.BaseColor.RED);
iTextSharp.text.Font font = FontFactory.GetFont(FontFactory.HELVETICA, 9, BaseColor.BLACK);
iTextSharp.text.Font fontSmall = FontFactory.GetFont(FontFactory.HELVETICA, 2, BaseColor.BLACK);
iTextSharp.text.Font fontBold = FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 9, BaseColor.BLACK);
Paragraph ClientName = new Paragraph("Client Name :" + " " + "Client", font);
Paragraph Date = new Paragraph("Date :" + " " + DateTime.Today.ToShortTimeString(), font);
doc.Add(ClientName);
doc.Add(Date);
LineSeparator ls = new LineSeparator();
ls.LineWidth = 7f;
doc.Add(new Chunk(ls, font.IsBold()));
Paragraph some= new Paragraph("Some Data", fontBold);
doc.Add(some);
doc.Add(new Chunk(ls, font.IsBold()));
DmtxImageEncoder encoder = new DmtxImageEncoder();
DmtxImageEncoderOptions options = new DmtxImageEncoderOptions();
options.SizeIdx = DmtxSymbolSize.DmtxSymbol18x18;
options.Scheme = DmtxScheme.DmtxSchemeC40;
Bitmap qrbitmap = encoder.EncodeImage("123456789", options);
iTextSharp.text.Image qrpic = iTextSharp.text.Image.GetInstance(qrbitmap, System.Drawing.Imaging.ImageFormat.Jpeg);
qrpic.ScalePercent(15f);
doc.Add(qrpic);
doc.Close();
//System.Diagnostics.Process.Start(filename);
}
}
这就是我在Windows应用程序中调用它的方式
Testdll.Class1 m = new Testdll.Class1();
m.CreatePDF();
MessageBox.Show("Done");
它会创建pdf文件但已损坏。请让我知道我做错了什么以及如何修复我的代码。
答案 0 :(得分:1)
除了您要删除当前用于创建QR码的逻辑外,所有的一切都没有 - iTextSharp支持几种不同类型的QR /条形码创建方法。
除了不使用 doc.Add(new Paragraph("Barcode PDF417"));
BarcodePDF417 pdf417 = new BarcodePDF417();
String text = "Call me Ishmael. Some years ago--never mind how long "
+ "precisely --having little or no money in my purse, and nothing "
+ "particular to interest me on shore, I thought I would sail about "
+ "a little and see the watery part of the world.";
pdf417.SetText(text);
Image img = pdf417.GetImage();
img.ScalePercent(50, 50 * pdf417.YHeight);
doc.Add(img);
doc.Add(new Paragraph("Barcode Datamatrix"));
BarcodeDatamatrix datamatrix = new BarcodeDatamatrix();
datamatrix.Generate(text);
img = datamatrix.CreateImage();
doc.Add(img);
doc.Add(new Paragraph("Barcode QRCode"));
BarcodeQRCode qrcode = new BarcodeQRCode("Moby Dick by Herman Melville", 1, 1, null);
img = qrcode.GetImage();
doc.Add(img);
语句之外,以下代码(以及您当前的代码)将帮助您开始生成QR /条形码。因为我不确定您想要填写QR /条形码,我无法为您创建精确的工作副本,但这应该让您立即开始!
如果有任何不清楚的地方,请告诉我,我可以编辑我的答案以提供更清晰的理解。
以下代码取自官方iText docs(最初使用的是Java),但为了您的目的,我稍作修改。
{{1}}
以下是输出示例:
答案 1 :(得分:-1)
我正在使用MemoryStream并遇到相同的问题。 我已经解决了,
document.Close()之后 memoryStream.Position = 0;把这个