2017-07-28 6 views
0

データが入ったpdfファイルがあります。今、私はこの既存のpdfファイルを使用して、そこにテーブルを挿入したいと思います。次に、既存のpdfファイルが以前と同じままになるように、別のファイル名でファイルを保存します。既存のpdfファイルに書き込んで、新しいファイルとしてitextsharpを使用して保存します。

注:既存のpdfファイルは、iTextSharpを使用して作成されていません。ランダムにダウンロードされました。私はテンプレートのような既存のPDFファイルを使用する必要があります。

public void Main(List<string> jobpath) 
{ 

    string oldpath = @"C:\Files\sample_new.pdf"; 
    string newpath = @"C:\Files\sample_new_1.pdf"; 

    PdfReader reader = new PdfReader(oldpath); 
    Rectangle size = reader.GetPageSizeWithRotation(1); 
    Document doc = new Document(size); 

    FileStream fs = new FileStream(newpath, FileMode.Create, FileAccess.Write); 
    PdfWriter writer = PdfWriter.GetInstance(doc, fs); 
    doc.Open(); 

    foreach (var list in jobpath) 
    { 
     cb.BeginText();    
     doc.NewPage(); 
     doc.Open();    

     PdfPTable table = new PdfPTable(1); 
     table.HorizontalAlignment = Element.ALIGN_CENTER; 
     table.TotalWidth = 400f; 
     float[] widths = new float[] { 2f }; 
     table.SetWidths(widths); 
     table.SpacingBefore = 40f; 
     table.SpacingAfter = 30f; 

     PdfPCell cell = new PdfPCell(); 
     cell.Colspan = 3; 
     cell.HorizontalAlignment = 1; 

     table.AddCell(list); 

     doc.Add(table); 

     PdfImportedPage page = writer.GetImportedPage(reader, 1);           
    } 
    doc.Close(); 
} 

上記のコードでは、テーブルを追加できますが、古いファイルの内容は新しいファイルにコピーされません。

+0

何を試しましたか?コードを私たちと共有してください。 – Ben

+0

@Benコードを共有しました – Ksingh

答えて

-1

次のコードを使用して、既存のpdfの内容を新しいものに追加することができました。この例では、最初のページのみが追加されています。

string oldpath = @"C:\Files\sample_new.pdf"; 
string newpath = @"C:\Files\sample_new_1.pdf"; 

PdfReader reader = new PdfReader(oldpath); 
iTextSharp.text.Rectangle size = reader.GetPageSizeWithRotation(1); 
Document doc = new Document(size); 

FileStream fs = new FileStream(newpath, FileMode.Create, FileAccess.Write); 
PdfWriter writer = PdfWriter.GetInstance(doc, fs); 
doc.Open(); 

PdfContentByte cb = writer.DirectContent; 

PdfImportedPage page = writer.GetImportedPage(reader, 1); 
cb.AddTemplate(page, 0, 0); 

foreach (var list in jobpath) 
{ 
    doc.NewPage(); 
    doc.Open();      

    PdfPTable table = new PdfPTable(1); 
    table.HorizontalAlignment = Element.ALIGN_CENTER; 
    table.TotalWidth = 400f; 
    float[] widths = new float[] { 2f }; 
    table.SetWidths(widths); 
    table.SpacingBefore = 40f; 
    table.SpacingAfter = 30f; 

    PdfPCell cell = new PdfPCell(); 
    cell.Colspan = 3; 
    cell.HorizontalAlignment = 1; 
    table.AddCell(list); 
    doc.Add(table); 
} 
doc.Close(); 
+0

なぜAddTemplate()を使って既存の文書のページを追加していますか?これにより、元の文書のすべての対話性が失われます。余分なページを追加するには 'PdfStamper'と' InsertPage() 'を使うべきです。私はあなたの答えを一時的に投票しています。 'PdfStamper'を使用するように修正したら、私に知らせてください、そして、私は下の投票を削除します(誰かがもっと正しい例を提示しない限り)。 –

関連する問題