Windows 8.1 Pro, Visual Studio 2015 업데이트 3, C#, .NET Framework 4.5를 사용하는 경우 C# .NET의 "매개 변수가 유효하지 않습니다." Ghostscript.NET (최신), GhostScript 9.20.Statement in using 문장
PDF를 PDF로 변환 중입니다. 하하. 글쎄, 나는 편집 할 수없고 낮은 품질의 "편집 가능한"PDF "하드"PDF를 만들고 있습니다. 프로세스는 편집 가능한 PDF를 가져 와서 PNG 파일의 x- 페이지로 저장하고 여러 PNG 파일을 여러 페이지 TIFF로 변환 한 다음 여러 페이지 TIFF를 필요한 PDF로 변환합니다.
이것은 GhostScript .NET 및 GS 9.10 이전 버전의 Visual Studio 2012에서 제대로 작동했습니다.
public static Tuple<string, List<string>> CreatePNGFromPDF(string inputFile, string outputfile)
{
Tuple<string, List<string>> t = null;
List<string> fileList = new List<string>();
string message = "Success";
string outputFileName = string.Empty;
int desired_x_dpi = 96;
int desired_y_dpi = 96;
try
{
using (GhostscriptViewer gsViewer = new GhostscriptViewer())
{
gsViewer.Open(inputFile);
using (GhostscriptRasterizer rasterizer = new GhostscriptRasterizer(gsViewer))
{
for (int pageNumber = 1; pageNumber <= rasterizer.PageCount; pageNumber++)
{
using (System.Drawing.Image img = rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber))
{
outputFileName = outputfile.Replace(".png", string.Empty) + "_page_" + pageNumber.ToString() + ".png";
img.Save(outputFileName, ImageFormat.Png);
if (!fileList.Contains(outputFileName))
{
fileList.Add(outputFileName);
}
}
}
}
}
}
catch (Exception ex)
{
message = ex.Message;
}
t = new Tuple<string, List<string>>(message, fileList);
return t;
}
이 이제 라인 실패
using (System.Drawing.Image img = rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber))
초 페이지를 처리하는 단계를 포함한다. 첫 번째 페이지는 정상적으로 작동합니다.
GhostScript.NET 용 소스를 다운로드하고이를 내 솔루션에 추가하고 디버깅 등을했는데이를 파악하는 동안 오랜 시간을 보냈습니다. 어떤 문제를
static void Main(string[] args)
{
int xDpi = 96;
int yDpi = 96;
string pdfFile = @"Inputfilenamehere.pdf";
GhostscriptVersionInfo gsVersionInfo = GhostscriptVersionInfo.GetLastInstalledVersion(GhostscriptLicense.GPL | GhostscriptLicense.AFPL, GhostscriptLicense.GPL);
List<GhostscriptVersionInfo> gsVersionInfoList = GhostscriptVersionInfo.GetInstalledVersions(GhostscriptLicense.GPL | GhostscriptLicense.AFPL);
try
{
using (GhostscriptViewer gsViewer = new GhostscriptViewer())
{
gsViewer.Open(pdfFile);
using (GhostscriptRasterizer gsRasterizer = new GhostscriptRasterizer(gsViewer))
{
int pageCount = gsRasterizer.PageCount;
for (int i = 0; i < pageCount; i++)
{
Image img = gsRasterizer.GetPage(xDpi, yDpi, i + 1);
}
}
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
소호를 보라 :
나는 다음 날 간단한 콘솔 응용 프로그램에 더 조사하지하는 기능을 분리하고 최소한 사용할 수 있도록하기로 결정했다. 차이점은using
문에 내 이미지 신고를하지 않는다는 것입니다.
항상 좋은 소년 개발자가 되려고 노력하며 클래스가 IDisposable
을 구현할 때마다 using 문을 사용하려고합니다.
그래서 사용법을 제거하고 필자가 항상 원했던 저품질 PDF를 얻습니다. 내 인생은 이제 좋아. 나는 for
루프의 끝에서 img.Dispose()
를 호출하는 경우, 내가 다시 같은 오류를 얻을
using (GhostscriptViewer gsViewer = new GhostscriptViewer())
{
gsViewer.Open(inputFile);
using (GhostscriptRasterizer rasterizer = new GhostscriptRasterizer(gsViewer))
{
for (int pageNumber = 1; pageNumber <= rasterizer.PageCount; pageNumber++)
{
System.Drawing.Image img = rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber);
outputFileName = outputfile.Replace(".png", string.Empty) + "_page_" + pageNumber.ToString() + ".png";
img.Save(outputFileName, ImageFormat.Png);
if (!fileList.Contains(outputFileName))
{
fileList.Add(outputFileName);
}
}
}
}
주의!
내 생각에 내 문제는 GhostScript 또는 GhostScript.NET 문제가 아닙니다. 클래스가 IDisposable
을 구현하면 "using"문을 사용하는 것을 맹목적으로 주장하는 것에 대해 나는 골머럽 읶가? 나는 항상 가장 등 누수를 포기하는 using
문 IDisposable
를 구현하는 것을 포장하는 연습, 따라서
, 내 질문에 있다고 이해했습니다 내가 초기화 할 때 어떤 아이디어가 왜 "파라미터가 유효하지 않습니다"예외가 System.Drawing.Image
클래스 내에서 using
문 내에서 수업을하지만 그렇지 않은 경우에는? 나는 이것을 더 많이 이해하고 싶다. 누군가가 내가 제대로 내 객체를 폐기하고있어이 기능을 얻기도 보장 할 수 있습니다 방법을 알고있는 경우,
더 나은 아직, 그것은 가장 좋은 것입니다.
정보를 검색 할 때이 특정 주제에 대해 많이 알지 못했습니다. 동일한 오류가있는 using 문에서 그래픽 객체를 사용하는 사람에 대해 하나의 other StackOverflow post을 찾았습니다. 나는 관계가 있는지 궁금해. 나는 또한 I should be using Dispose()에 주목하지만, 문제를 일으키는 것으로 보입니다.내가 찾은 public void Run(string str)
STR은 "페이지 pdfshowpage_init의 pdfshowpage_finish"
// GSAPI: run the string
int rc_run = _gs.gsapi_run_string(_gs_instance, str, 0, out exit_code);
이 문제에 대한 답변을 찾았습니까? 비슷한 문제가 발생할 수도 있습니다. – Puvi