0
的PDF是由HTTP GET来我之后创建一个损坏的PDF。 我已经在几个例子看这里SO和一直没能挤进这个bug。iText的夏普添加图像
注:我只保存PDF文件进行调试,我得到这之后想通了这将是完全在内存中,并修改PDF发布到API为base64。
我在做什么错?
//get Invoice PDF
Byte[] pdf_bytes = Convert.FromBase64String(GetInvoicePDF(account, invoice, config));
//Save a Debug Copy
using(FileStream fs = File.Create("C:\\temp\\b4-invoice-" + invoice.id + ".pdf"))
{
fs.Write(pdf_bytes, 0, (int)pdf_bytes.Length);
fs.Flush();
fs.Close();
}
Document doc = new Document(PageSize.A4, 30, 30, 30, 30);
MemoryStream msPDF = new MemoryStream(pdf_bytes);
//Create Bitmap
System.Drawing.Bitmap Bmp = new System.Drawing.Bitmap(333, 195);
using(System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(Bmp))
using(System.Drawing.SolidBrush brush = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(255, 255, 255)))
{
gfx.FillRectangle(brush, 0, 0, 333, 195);
}
Image img = Image.GetInstance(Bmp, System.Drawing.Imaging.ImageFormat.Bmp);
img.SetAbsolutePosition(0, 0);
PdfWriter wri = PdfWriter.GetInstance(doc, msPDF);
doc.Open();//Open Document to write
doc.Add(img);
doc.Close();
doc.Dispose();
Byte[] pdf_bytes_out = msPDF.ToArray();
//Save a Debug Copy
using(FileStream fs = File.Create("C:\\temp\\invoice-" + invoice.id + ".pdf"))
{
fs.Write(pdf_bytes_out, 0, (int)pdf_bytes_out.Length);
fs.Flush();
fs.Close();
}
您正在向文件写入两个PDF。两个os中哪一个腐败?我从您从网络中检索到的文件中没有看到与iText相关的任何内容。 –
修改后的一个。你没有看到“PdfWriter wri = PdfWriter.GetInstance(doc,msPDF);” 其实我写2 PDF的单一来源,一个经过修改和一个前。只有通过iTextSharp运行的PDF是损坏的。第一个写出来罚款。 –
什么@Bruno想告诉你的是,你把两个不同的PDF转换为'MemoryStream的msPDF',一前一后。包含两个pdf,一个接一个,没有信封的文件将永远不会成为有效的pdf,无论如何创建个别pdf。 – mkl