Member 13659255 Ответов: 0

Изображения Stackpanel с ghostscript.net


Я конвертирую многостраничные PDF файлы в JPG и сохраняю их на диск с помощью ghostscript.net-да. Затем я добавляю их в stackpanel (вертикальная ориентация) на холсте внутри ScrollViewer. Это хорошо работает для небольших документов, однако более крупные документы работают только примерно до 10-й страницы при 500 dpi. Что-то большее, чем это, и они, кажется, не появляются в моей стековой панели. Однако, когда я уменьшаю DPI, я могу получить больше страниц, но они, конечно, меньше, что нежелательно.

Я делаю это внутри цикла for и сначала думал, что он катится через цикл слишком быстро, а запись на жесткий диск была слишком медленной, поэтому я вставил в цикл какой-то поток.sleep(2000), чтобы попытаться замедлить его, но это никак не повлияло на количество появившихся страниц.

Я не уверен и не могу найти никакой документации, чтобы указать, является ли это проблемой с тем, сколько информации может появиться в stackpannel, или если есть ограничение на растеризацию ghostscript или растеризацию.getpage()

Что я уже пробовал:

<pre>            using (var rasterizer = new GhostscriptRasterizer()) //create an instance for GhostscriptRasterizer
            {
                //opens the PDF file for rasterizing
                string mydocpath = myDir; //Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                rasterizer.Open("test.pdf");
                var rasterimg = new GhostscriptRasterizer();
                rasterimg.("test.pdf");
                double imgHeight = 0;
                for (int i = 1; i <= rasterizer.PageCount; i++)
                {
                    rasterimg.Open("test.pdf");
                    var img = rasterizer.GetPage(400, 400, i);
                    rasterimg.Dispose();
                    img.Save(mydocpath + "/test_"+i+".jpg", ImageFormat.Jpeg);
                    string imgPath = mydocpath + "/test_" + i + ".jpg";
                    Image myImage = new Image();
                    myImage.Name = "test_" + i;
                    myImage.Source = new BitmapImage(new Uri("File://" + imgPath));
                    pdfcanvas.Children.Add(myImage);
                    imgHeight = imgHeight + myImage.Source.Height;
                    if (pdfcanvas1.Width <= myImage.Source.Width)
                        {
                            pdfcanvas1.Width = myImage.Source.Width;
                        }
                }    
                pdfcanvas1.Height = imgHeight;
                
            }

Richard Deeming

Почему ты звонишь Open и Dispose на rasterimg внутри петли? Просто откройте файл один раз, вне цикла, и избавьтесь от него после завершения цикла.

0 Ответов