1

WPFアプリケーションで、FDFからPDFTemplateにデータを保存してPDFファイルを保存しようとしています。

というわけで、こんな状況です。テンプレートとして機能し、プレースホルダー (またはフィールド) を持つPDFTemplate.pdfがあります。次に、この FDF ファイルをプログラムで生成します。このFDFファイルには、 PDFTemplateに入力するために必要なすべてのフィールド名が含まれています。また、このFDFにはPDFTemaplteのファイル パスも含まれているため、開くときにどのPDFを使用するかがわかります。使用する。

ここで、 FDFをダブルクリックしようとすると、Adobeer Acrobat Readerが開き、データが入力されたPDFTemplateが表示されます。しかし、ファイル メニューを使用してこのファイルを保存することはできません。データ。

そこで、 iTextsharp を使用PDFTemaplateファイルを読み取り、FDFファイルを読み取ってそこからデータを取得し、別のPDFファイルを作成してデータと共に保存することにしました。

以下は私が使用しているコードですが、新しく保存したファイルを開くと、ファイルが破損していて修復できないと表示されます。

    using (MemoryStream pdfFlat = new MemoryStream())
    using (PdfReader pdfReader = new PdfReader(templateLocation))
    using(PdfStamper pdfStamper = new PdfStamper(pdfReader, pdfFlat))
    using(FdfReader fdfReader = new FdfReader(fdfFileNameAndPath))
    {
        AcroFields pdfForm = pdfStamper.AcroFields;
        pdfForm.SetFields(fdfReader);
        pdfStamper.FormFlattening = true;
        pdfStamper.Writer.CloseStream = false;

        using (FileStream saveStream = 
            new FileStream(
                outputFileNameAndPath, 
                FileMode.Create, 
                FileAccess.Write))
        {
            pdfFlat.WriteTo(saveStream);
            pdfFlat.Flush();
            saveStream.Close();
        }

        fdfReader.Close();
        pdfStamper.Close();
        pdfReader.Close();
        pdfFlat.Close();
    }

何が間違っているのかわかりません。助けてください。

4

2 に答える 2

1

私はMemoryStreamを使用しないことでそれを行うことができました:

  File.Copy(formLocation, outputFileNameAndPath, true);

  using (FileStream pdfFlat = new FileStream(outputFileNameAndPath,FileMode.Open))
  using (PdfReader pdfReader = new PdfReader(formLocation))
  using (PdfStamper pdfStamper = new PdfStamper(pdfReader, pdfFlat))
  using (FdfReader fdfReader = new FdfReader(fdfFileNameAndPath))
  {
      AcroFields pdfForm = pdfStamper.AcroFields;

      pdfForm.SetFields(fdfReader);
      pdfStamper.FormFlattening = true;
      pdfStamper.Writer.CloseStream = false;

      fdfReader.Close();
      pdfStamper.Close();
      pdfReader.Close();
      pdfFlat.Close();
  }

よくわかりませんが、MemoryStreamを使用してファイルを開き、それを別のFileStreamに保存していたときに、何かが機能していませんでした。

しかし、私はそれをよりシンプルにしようとしましたが、うまくいきました。

于 2013-06-26T08:09:38.413 に答える