0

我正在使用 MigraDoc 呈现 PDF 文档。每个部分都有一个或多个段落文本。

目前这是我创建文档的方式;

var document = new Document();
var pdfRenderer = new PdfDocumentRenderer(true);
pdfRenderer.Document = document; 

for(int i=0;i<10;i++){
    Section section = document.AddSection();
    section.PageSetup.PageFormat = PageFormat.A4;

    for(int j=0;j<5;j++) {
    var paragraphText = GetParaText(i,j); // some large text can span multiple pages
    section.AddParagraph(paragraphText);
    //Want page count per section? 
     // Section 1 -> 5 , Section 2 ->3 etc.
    // int count = CalculateCurrentPageCount(); //*EDIT*
   }
}
// Create the PDF document
pdfRenderer.RenderDocument();
pdfRenderer.Save(filename);

编辑:目前我使用以下代码来获取页数。
但这需要很多时间,可能每个页面都渲染两次。

 public int CalculateCurrentPageCount()
        {
            var tempDocument = document.Clone();
            tempDocument.BindToRenderer(null);     
            var pdfRenderer = new PdfDocumentRenderer(true);
            pdfRenderer.Document = tempDocument;
            pdfRenderer.RenderDocument();
            int count = pdfRenderer.PdfDocument.PageCount;
            Console.WriteLine("-- Count :" + count);
            return count;
        }

根据添加的内容,某些部分可以跨越多个页面。

是否有可能获取/查找一个部分呈现多少页(以 PDF 格式)?

编辑2:是否可以标记一个部分并找到它从哪个页面开始?

4

2 回答 2

1

感谢您的帮助。我是这样计算的(即获取代码中的计数......):

首先,我用该部分的创建计数标记了该部分

newsection.Tag = num_sections_in_doc; //count changes every time i add a section

然后我使用 GetDocumentObjectsFromPage :

var x = new Dictionary<int, int>();
                int numpages = pdfRenderer.PdfDocument.PageCount;
                for (int idx = 0; idx < numpages; idx++)
                {
                    DocumentObject[] docObjects = pdfRenderer.DocumentRenderer.GetDocumentObjectsFromPage(idx + 1);
                    if (docObjects != null && docObjects.Length > 0)
                    {
                        Section section = docObjects[0].Section;
                        int sectionTag = -1;
                        if (section != null)
                            sectionTag = (int)section.Tag;
                        if (sectionTag >= 0)
                        {
                            // count a section only once
                            if (!x.ContainsKey(sectionTag))
                                x.Add(sectionTag, idx + 1);
                        }
                    }
                }

x.Keys 是部分。
和 x.values 是每个部分的开始。

于 2013-11-10T10:39:55.160 回答
0

如果要在 PDF 中显示页数,请使用paragraph.AddSectionPagesField().

另请参阅:
https ://stackoverflow.com/a/19499231/162529

要在代码中获取计数:您可以将标签添加到任何文档对象(例如,添加到任何段落),然后用于docRenderer.GetDocumentObjectsFromPage(...)查询特定页面的对象。这使您可以找出此页面上的对象属于哪个部分。

或者在单独的文档中创建每个部分,然后使用docRenderer.RenderPage(...)如下所示将它们组合成一个 PDF:
http
://www.pdfsharp.net/wiki/MixMigraDocAndPdfSharp-sample.ashx 该示例将页面缩小到缩略图大小 - 您可以绘制它们1:1,每一个都在一个新的页面上。

于 2013-10-22T08:43:41.123 回答