Ghostscript PDF для Png обрезать х и у - PullRequest
0 голосов
/ 13 июня 2018

Я использую ghostscript для своего преобразования PDF в PNG на vb.net, когда я обрезаю свой pdf, затем я конвертирую это в png, но ghostscript сохраняет обрезание позиций x и y на моей картинке.

Я решил эту проблему, когда я использую gswin64.exe в cmd с: -c "<</Install {-48 -87 translate}>> setpagedevice"

, но с dll Ghostcript.NET, когда я добавляю эту команду в свой код: oGSImage.CustomSwitches.Add("-c ""<</Install {-48 -87 translate}>> setpagedevice""") У меня естьсообщение об ошибке

Ghostscript.NET.GhostscriptAPICallException: произошла ошибка при вызове 'gsapi_init_with_args': -100

мое устройство - pngAlpha, если кто-то может мне помочь:)

Ответы [ 2 ]

0 голосов
/ 15 июня 2018

Я нашел решение: Инициализировать переменную с нужными значениями кадрирования.

Dim nLeft as integer = 20
Dim nRight as integer = 20
Dim nBoth as integer = 40
Dim nUp as integer = 20

Я создал растеризованный объект с помощью Ghostscript.

Dim rasterize As Rasterizer.GhostscriptRasterizer = New Rasterizer.GhostscriptRasterizer()
    rasterize.Open("PDFPath")
    Dim nHeightBased As Integer = rasterize.GetPage(72, 72, 1).Height
    Dim nWidthBased As Integer = rasterize.GetPage(72, 72, 1).Width
    rasterize.Close()

затем я создаю новый растеризатор для получения страницы размера высоты и ширины с помощью пользовательских переключателей ("-dPDFFitPage")

        rasterize = New Rasterizer.GhostscriptRasterizer()
        rasterize.CustomSwitches.Add("-dPDFFitPage")
        rasterize.Open(cPathPDF)

        Dim nHeightBound As Integer = nHeightBased - rasterize.GetPage(72, 72, 1).Height
        Dim nWidthBound As Integer = nWidthBased - rasterize.GetPage(72, 72, 1).Width
        Dim nWidthPDF As Integer = rasterize.GetPage(72, 72, 1).Width
        Dim nHeightPDF As Integer = rasterize.GetPage(72, 72, 1).Height
        rasterize.Close()

        Dim nWidthCrop As Integer = (nWidthPDF + nWidthBound) - (nLeft + nRight)
        Dim nHeightCrop As Integer = (nHeightPDF + (nHeightBound / 2)) - (nBoth + nUp)

        CropPDF("PathPDF", nLeft, nBoth, nWidthCrop, nHeightCrop)

И я создаю функцию CropPDF:

Теперь мы берем gswinc32.exe или gswinc64.exe и .dll и копируем / вставляем новый путь, в моем примере я использую «PathEXE»

Public Function CropPDF(ByVal cPathPDF As String, ByVal nLeft As Integer, ByVal nBoth As Integer, ByVal nWidthCrop As Integer, ByVal nHeightCrop As Integer)

    Dim cPathWithoutExtension = Path.GetDirectoryName("PDFPath") & "/" & Path.GetFileNameWithoutExtension("PDFPath")

    Dim gsPath As String = HttpContext.Current.Server.MapPath("PathEXE")
        Dim gsArgsList As List(Of String) = New List(Of String)

        gsArgsList.Add("-sDEVICE=pdfwrite")
        gsArgsList.Add(" -dFIXEDMEDIA")
        gsArgsList.Add(" -dDEVICEWIDTHPOINTS=" & nWidthCrop)
        gsArgsList.Add(" -dDEVICEHEIGHTPOINTS=" & nHeightCrop)
        gsArgsList.Add(" -o """ & cPathWithoutExtension & "_Crop.pdf""")
        gsArgsList.Add(" -c ""<</Install {-" & nLeft & " -" & nBoth & " translate} >> setpagedevice """)
        gsArgsList.Add(" -f " & cPathPDF)

        Dim gsArgs As String = String.Join(Nothing, gsArgsList)

        Process.Start(gsPath, gsArgs).WaitForExit()

        Dim OFI As FileInfo = New FileInfo(cPathPDF)
        OFI.Delete()

        Dim DestOFI As FileInfo = New FileInfo(cPathWithoutExtension & "_Crop.pdf")
        DestOFI.MoveTo(cPathPDF)

        Return cPath

End Function

Теперь идеальная работа сnLeft nRight nBoth nUp, надеясь, что это поможет некоторым людям: D

0 голосов
/ 13 июня 2018

Этот конкретный аргумент выполняет PostScript из командной строки, он не является «переключателем» как таковым.Получите это в неправильном месте, и это не будет работать, и переводчик выйдет.Я предполагаю, что (или что-то подобное) происходит, интерпретатор не получает данные так, как ему нужно.

Вы можете поместить текст между -c "" -f в текстовый файла затем запустите этот файл и , а затем файл PDF в командной строке (т.е. в качестве аргументов), если Ghostscript.NET позволяет вам сделать это.

...