私はPDFを読み込み、作成中のPDFでいくつかのページを複製しようとしています。私が作成したPDFファイルを保存しようとすると、例外が悪名高いPdfSharpページのクローニング:同じキーを持つアイテムが既に追加されています
にスローされますが、同じキーを持つ項目がすでに
を追加された私はPdf Document Save to stream method throwing exceptionで述べた同じエラー(PdfSharpフォーラムを見つけました2010年から)、しかし決議は言及されなかった。そして、SO c# PDFSharp - what's the point of Table.Clone?問題と同じ種類のように見えます(が、私は私の場合にそれを適用する方法が表示されない)
私のテストコードは次のとおりです。 (Nuget経由で最新のPdfSharpを使用して注)
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
namespace TestError
{
public class TestCode
{
public void DupePages(string inFilePath, string outFilePath)
{
var inDoc = PdfReader.Open(inFilePath, PdfDocumentOpenMode.Import);
var outDoc = new PdfDocument();
outDoc.AddPage((PdfPage)inDoc.Pages[0].Clone());
outDoc.AddPage((PdfPage)inDoc.Pages[0].Clone());
outDoc.Save(outFilePath); // Exception thrown here
}
}
}
私はクローン操作が異なるオブジェクトを返していることを確認しましたが、何とかそれはPdfSharpのために十分ではありません
System.ArgumentException occurred
HResult=0x80070057
Message=An item with the same key has already been added.
Source=mscorlib
StackTrace:
at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at PdfSharp.Pdf.PdfReferenceTable.Compact()
at PdfSharp.Pdf.PdfDocument.PrepareForSave()
at PdfSharp.Pdf.PdfDocument.DoSave(PdfWriter writer)
at PdfSharp.Pdf.PdfDocument.Save(Stream stream, Boolean closeStream)
at PdfSharp.Pdf.PdfDocument.Save(String path)
at TestError.TestCode.DupePages(String inFilePath, String outFilePath)
とスタックトレースがあります。
ページを正常にクローンするにはどうすればよいですか?
すべてのPDFファイルでクラッシュしますか? MCVEを持つことは良いことです。 https://stackoverflow.com/help/mcveこのテンプレートを使用することができます:http://pdfsharp.net/wiki/IssueSubmissions.ashx –
'Table.Clone()'はMigraDocであり、PDFsharpの 'Page.Clone ) '。 –
@ User241.007はい、PDFファイルでクラッシュします。そして、そのコードは* MCVEです –