2016-12-24 9 views
0

PDFがhttp getから私に届いています。 私はここでいくつかの例を見てきましたが、このバグを解決できませんでした。画像を追加した後に鮮明なpdfが作成されています

注:私は、この問題を解消した後、PDFをメモリに保存し、修正されたPDFをapiにbase64として投稿するだけで、デバッグの目的でPDFを保存します。

私は間違っていますか?

//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(); 
} 
+1

2つのPDFをファイルに書き込んでいます。両方のOSのどちらが壊れていますか?あなたがウェブから取り出すファイルにiTextに関連するものは何も表示されません。 –

+0

変更されたもの。あなたは "PdfWriter wri = PdfWriter.GetInstance(doc、msPDF);" 実際に私は1つのソースから、修正前と修正後の2つのPDFを書いています。 iTextSharpで実行されるPDFのみが破損しています。最初の人は罰金を出します。 –

+1

@Brunoがあなたに伝えようとしたのは、2つの別個のpdfsを「MemoryStream msPDF」に入れたということです。また、2つのpdfを1つずつ含むファイルは、個々のpdfsがどのように作成されても、有効なpdfになることはありません。 – mkl

答えて

0

私はそれを理解しました。私はdocオブジェクトをまったく使用する必要はなかったことが分かります。

//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(); 
} 

MemoryStream msPDF = new MemoryStream(); 

PdfReader reader = new PdfReader(pdf_bytes); 
Rectangle rect = reader.GetPageSize(1); 


using(PdfStamper stamper = new PdfStamper(reader, msPDF)) 
{ 
    // modify the pdf content 
    PdfContentByte cb = stamper.GetOverContent(1); 
    //cb.SetColorStroke(iTextSharp.text.BaseColor.GREEN); 
    //cb.SetLineWidth(1f); 
    cb.SetColorFill(iTextSharp.text.BaseColor.WHITE); 
    cb.Rectangle(rect.GetLeft(0), rect.GetTop(0) - 250, 350, 250); 
    cb.Fill(); 
    //cb.Stroke(); 
} 
reader.Close(); 


Byte[] pdf_bytes_out = msPDF.GetBuffer(); 

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(); 
} 
関連する問題