C#에서 VectSharp에서 IronPDF로 마이그레이션하는 방법
VectSharp는 .NET 생태계에서 과학적 시각화와 기술 일러스트레이션에 특히 가치 있는 벡터 그래픽 라이브러리로 자리 잡았습니다. 그러나 개발 팀이 비즈니스 문서, 보고서, 송장 또는 HTML 기반 콘텐츠를 생성해야 할 때, VectSharp의 그래픽 중심 패러다임은 상당한 마찰을 만듭니다. 라이브러리는 그림과 플롯을 만드는 과학자들을 위해 설계되었으며, 문서를 생성하는 개발자를 위한 것이 아닙니다.
이 가이드는 VectSharp에서 IronPDF로의 완전한 마이그레이션 경로를 제공하며, 전문 .NET 개발자가 이 전환을 평가할 수 있도록 단계별 지침, 코드 비교, 실용적인 예제를 포함합니다.
왜 VectSharp에서 마이그레이션 해야 하는가
VectSharp는 다이어그램, 차트 및 기술 일러스트레이션을 만들기 위해 설계된 과학적 시각화 및 벡터 그래픽 라이브러리입니다. 문서 생성을 위해 설계되지 않았으며, PDF를 출력하는 드로잉 라이브러리입니다. 개발 팀이 마이그레이션을 고려하는 주요 이유는 다음과 같습니다:
과학집중 전용: VectSharp는 데이터 시각화 및 플롯팅을 위해 설계되었으며, 송장, 보고서, 증명서와 같은 비즈니스 문서를 위해 설계되지 않았습니다.
HTML 지원 없음: VectSharp는 HTML 또는 CSS를 PDF로 변환할 수 없습니다. 모든 요소는 벡터 그래픽 명령을 사용하여 수동으로 그려야 합니다.
좌표 기반 API: 모든 요소는 정확한 X,Y 좌표로 배치해야 합니다. 자동 레이아웃, 흐름 또는 텍스트 래핑이 없습니다.
CSS 스타일링 없음: 모든 스타일링은 메서드 호출을 통해 프로그래매틱하게 이루어집니다. 웹 개발자는 기존 CSS 지식 활용이 불가능합니다.
JavaScript 없음: VectSharp는 동적 웹 콘텐츠, 인터랙티브 차트 또는 JavaScript 기반 시각화를 렌더링할 수 없습니다.
텍스트 레이아웃 없음: 자동 텍스트 래핑, 페이지 나누기, 흐름 레이아웃이 제공되지 않습니다. 개발자는 수동으로 텍스트 위치와 페이지 구분을 계산해야 합니다.
그래픽 우선 패러다임: 이 라이브러리는 다이어그램을 위해 설계되었으며, 보고서나 송장을 위해 설계되지 않았습니다. 문서 생성은 광범위한 수작업을 요구합니다.
핵심 문제: 그래픽 라이브러리 vs 문서 생성기
VectSharp는 모든 요소를 수동으로 벡터 그림을 그려야 합니다:
// VectSharp:수동vector drawing for every element
Page page = new Page(595, 842);
Graphics graphics = page.Graphics;
graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255));
graphics.FillText(60, 70, "Invoice", new Font(new FontFamily("Arial"), 20), Colours.White);
// ... continue drawing every single element manually
// VectSharp:수동vector drawing for every element
Page page = new Page(595, 842);
Graphics graphics = page.Graphics;
graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255));
graphics.FillText(60, 70, "Invoice", new Font(new FontFamily("Arial"), 20), Colours.White);
// ... continue drawing every single element manually
' VectSharp:수동vector drawing for every element
Dim page As New Page(595, 842)
Dim graphics As Graphics = page.Graphics
graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255))
graphics.FillText(60, 70, "Invoice", New Font(New FontFamily("Arial"), 20), Colours.White)
' ... continue drawing every single element manually
IronPDF는 HTML—범용 문서 형식을 사용합니다:
// IronPDF: Declarative HTML for document creation
var html = "<h1>Invoice</h1><p>Customer: Acme Corp</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
// IronPDF: Declarative HTML for document creation
var html = "<h1>Invoice</h1><p>Customer: Acme Corp</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
' IronPDF: Declarative HTML for document creation
Dim html As String = "<h1>Invoice</h1><p>Customer: Acme Corp</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
IronPDF대 VectSharp: 기능 비교
구조적 차이를 이해하면 기술 결정을 내리는데 이주 투자를 평가하는데 도움이 됩니다:
| 기능 | VectSharp | IronPDF |
|---|---|---|
| 주요 사용 | 벡터 그래픽 | 문서 생성 |
| PDF 출력 | 예 | 예 |
| HTML 지원 | 아니요 | 예 |
| 라이선스 | LGPL | 상업적 |
| 오픈 소스 | 예 | 부분적으로 (상업적 기능) |
| 최적의 용도 | 과학적 시각화 | 일반 PDF 문서 |
| 커스터마이제이션 | 그래픽에 제한 | 광범위, 문서 관련 |
| HTML to PDF | 아니요 | 전체 Chromium |
| URL을 PDF로 | 아니요 | 예 |
| CSS 지원 | 아니요 | 전체 CSS3 |
| JavaScript | 아니요 | 전체 ES2024 |
| 자동 레이아웃 | 아니요 | 예 |
| 자동 페이지 매김 | 아니요 | 예 |
| 텍스트 줄바꿈 | 수동 | 자동 |
| PDF 병합 | 아니요 | 예 |
| PDF 분할 | 아니요 | 예 |
| 비밀번호 보호 | 아니요 | 예 |
| 디지털 서명 | 아니요 | 예 |
| 학습 곡선 | 높음 (좌표) | 낮음 (HTML/CSS) |
| 코드 다양성 | 매우 높음 | 낮음 |
빠른 시작: VectSharp에서 IronPDF로의 마이그레이션
이러한 기본 단계를 통해 즉시 이주를 시작할 수 있습니다.
단계 1: NuGet 패키지 교체
모든VectSharp패키지를 제거합니다:
# RemoveVectSharppackages
dotnet remove package VectSharp
dotnet remove package VectSharp.PDF
# RemoveVectSharppackages
dotnet remove package VectSharp
dotnet remove package VectSharp.PDF
IronPDF 설치하세요:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
단계 2: 네임스페이스 업데이트
VectSharp 네임스페이스를 IronPdf 네임스페이스로 교체합니다:
// Before (VectSharp)
using VectSharp;
using VectSharp.PDF;
// After (IronPDF)
using IronPdf;
// Before (VectSharp)
using VectSharp;
using VectSharp.PDF;
// After (IronPDF)
using IronPdf;
Imports IronPdf
단계 3: 라이선스 초기화
애플리케이션 시작 시 라이선스 초기화를 추가합니다:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
코드 마이그레이션 예제
HTML을 PDF로 변환
VectSharp는 HTML에서 PDF로 변환을 지원하지 않습니다. 이 기본 역량 차이가 많은 마이그레이션 결정을 주도합니다.
VectSharp 접근 방식:
// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using VectSharp.SVG;
using System.IO;
class Program
{
static void Main()
{
//VectSharpdoesn't directly support HTML to PDF
// It requires manual creation of graphics objects
Document doc = new Document();
Page page = new Page(595, 842); // A4 size
Graphics graphics = page.Graphics;
graphics.FillText(100, 100, "Hello from VectSharp",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
doc.Pages.Add(page);
doc.SaveAsPDF("output.pdf");
}
}
// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using VectSharp.SVG;
using System.IO;
class Program
{
static void Main()
{
//VectSharpdoesn't directly support HTML to PDF
// It requires manual creation of graphics objects
Document doc = new Document();
Page page = new Page(595, 842); // A4 size
Graphics graphics = page.Graphics;
graphics.FillText(100, 100, "Hello from VectSharp",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
doc.Pages.Add(page);
doc.SaveAsPDF("output.pdf");
}
}
Imports VectSharp
Imports VectSharp.PDF
Imports VectSharp.SVG
Imports System.IO
Module Program
Sub Main()
' VectSharp doesn't directly support HTML to PDF
' It requires manual creation of graphics objects
Dim doc As New Document()
Dim page As New Page(595, 842) ' A4 size
Dim graphics As Graphics = page.Graphics
graphics.FillText(100, 100, "Hello from VectSharp",
New Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24))
doc.Pages.Add(page)
doc.SaveAsPDF("output.pdf")
End Sub
End Module
IronPDF 접근법:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF</h1><p>This is HTML content.</p>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF</h1><p>This is HTML content.</p>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF</h1><p>This is HTML content.</p>")
pdf.SaveAs("output.pdf")
End Sub
End Class
VectSharp는 Document, Page, Graphics 객체를 생성해야 하며, 정확한 좌표와 글꼴 객체를 사용하여 텍스트를 수동으로 배치합니다. IronPDF는 전체 CSS 스타일 지원과 함께 HTML을 직접 렌더링합니다.
고급 HTML에서 PDF로의 시나리오는 HTML to PDF 변환 가이드를 참조하십시오.
다중 페이지 문서 생성
다중 페이지 문서는 이 .NET PDF 라이브러리들 간의 구조적 차이를 드러냅니다.
VectSharp 접근 방식:
// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using System;
class Program
{
static void Main()
{
Document doc = new Document();
// Page 1
Page page1 = new Page(595, 842);
Graphics g1 = page1.Graphics;
g1.FillText(50, 50, "Page 1",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
g1.FillText(50, 100, "First page content",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 14));
doc.Pages.Add(page1);
// Page 2
Page page2 = new Page(595, 842);
Graphics g2 = page2.Graphics;
g2.FillText(50, 50, "Page 2",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
g2.FillText(50, 100, "Second page content",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 14));
doc.Pages.Add(page2);
doc.SaveAsPDF("multipage.pdf");
}
}
// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using System;
class Program
{
static void Main()
{
Document doc = new Document();
// Page 1
Page page1 = new Page(595, 842);
Graphics g1 = page1.Graphics;
g1.FillText(50, 50, "Page 1",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
g1.FillText(50, 100, "First page content",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 14));
doc.Pages.Add(page1);
// Page 2
Page page2 = new Page(595, 842);
Graphics g2 = page2.Graphics;
g2.FillText(50, 50, "Page 2",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
g2.FillText(50, 100, "Second page content",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 14));
doc.Pages.Add(page2);
doc.SaveAsPDF("multipage.pdf");
}
}
Imports VectSharp
Imports VectSharp.PDF
Imports System
Class Program
Shared Sub Main()
Dim doc As New Document()
' Page 1
Dim page1 As New Page(595, 842)
Dim g1 As Graphics = page1.Graphics
g1.FillText(50, 50, "Page 1", New Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24))
g1.FillText(50, 100, "First page content", New Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 14))
doc.Pages.Add(page1)
' Page 2
Dim page2 As New Page(595, 842)
Dim g2 As Graphics = page2.Graphics
g2.FillText(50, 50, "Page 2", New Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24))
g2.FillText(50, 100, "Second page content", New Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 14))
doc.Pages.Add(page2)
doc.SaveAsPDF("multipage.pdf")
End Sub
End Class
IronPDF 접근법:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = @"
<h1>Page 1</h1>
<p>First page content</p>
<div style='page-break-after: always;'></div>
<h1>Page 2</h1>
<p>Second page content</p>
";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("multipage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = @"
<h1>Page 1</h1>
<p>First page content</p>
<div style='page-break-after: always;'></div>
<h1>Page 2</h1>
<p>Second page content</p>
";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("multipage.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html As String = "
<h1>Page 1</h1>
<p>First page content</p>
<div style='page-break-after: always;'></div>
<h1>Page 2</h1>
<p>Second page content</p>
"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("multipage.pdf")
End Sub
End Class
VectSharp는 별도의 Page 객체와 별도의 Graphics 컨텍스트를 생성해야 하며, 각 페이지에 대한 모든 텍스트 요소를 좌표와 글꼴 객체로 수동으로 배치해야 합니다. IronPDF는 CSS page-break-after: always가 포함된 단일 HTML 문자열을 사용하여 자동으로 여러 페이지 문서를 생성합니다.
도형 및 텍스트 그리기
그래픽 기능은 VectSharp의 우수성을 보여주지만 웹 표준이 더 적은 코드로 동등한 기능성을 제공하는 경우를 보여줍니다.
VectSharp 접근 방식:
// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using System;
class Program
{
static void Main()
{
Document doc = new Document();
Page page = new Page(595, 842);
Graphics graphics = page.Graphics;
// Draw rectangle
graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255));
// Draw circle
GraphicsPath circle = new GraphicsPath();
circle.Arc(400, 100, 50, 0, 2 * Math.PI);
graphics.FillPath(circle, Colour.FromRgb(255, 0, 0));
// Add text
graphics.FillText(50, 200, "VectSharp Graphics",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 20));
doc.Pages.Add(page);
doc.SaveAsPDF("shapes.pdf");
}
}
// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using System;
class Program
{
static void Main()
{
Document doc = new Document();
Page page = new Page(595, 842);
Graphics graphics = page.Graphics;
// Draw rectangle
graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255));
// Draw circle
GraphicsPath circle = new GraphicsPath();
circle.Arc(400, 100, 50, 0, 2 * Math.PI);
graphics.FillPath(circle, Colour.FromRgb(255, 0, 0));
// Add text
graphics.FillText(50, 200, "VectSharp Graphics",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 20));
doc.Pages.Add(page);
doc.SaveAsPDF("shapes.pdf");
}
}
Imports VectSharp
Imports VectSharp.PDF
Imports System
Module Program
Sub Main()
Dim doc As New Document()
Dim page As New Page(595, 842)
Dim graphics As Graphics = page.Graphics
' Draw rectangle
graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255))
' Draw circle
Dim circle As New GraphicsPath()
circle.Arc(400, 100, 50, 0, 2 * Math.PI)
graphics.FillPath(circle, Colour.FromRgb(255, 0, 0))
' Add text
graphics.FillText(50, 200, "VectSharp Graphics",
New Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 20))
doc.Pages.Add(page)
doc.SaveAsPDF("shapes.pdf")
End Sub
End Module
IronPDF 접근법:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = @"
<div style='width: 200px; height: 100px; background-color: blue; margin: 50px;'></div>
<div style='width: 100px; height: 100px; background-color: red;
border-radius: 50%; margin-left: 350px; margin-top: -50px;'></div>
<h2 style='margin-left: 50px;'>IronPDF Graphics</h2>
";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("shapes.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = @"
<div style='width: 200px; height: 100px; background-color: blue; margin: 50px;'></div>
<div style='width: 100px; height: 100px; background-color: red;
border-radius: 50%; margin-left: 350px; margin-top: -50px;'></div>
<h2 style='margin-left: 50px;'>IronPDF Graphics</h2>
";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("shapes.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Class Program
Shared Sub Main()
Dim renderer As New ChromePdfRenderer()
Dim html As String = "
<div style='width: 200px; height: 100px; background-color: blue; margin: 50px;'></div>
<div style='width: 100px; height: 100px; background-color: red;
border-radius: 50%; margin-left: 350px; margin-top: -50px;'></div>
<h2 style='margin-left: 50px;'>IronPDF Graphics</h2>
"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("shapes.pdf")
End Sub
End Class
VectSharp는 GraphicsPath 객체를 생성하고, 정확한 수학적 매개 변수를 사용하여 Arc()를 호출하며, Colour.FromRgb()를 통해 색상을 관리해야 합니다. IronPDF는 친숙한 CSS 속성을 사용합니다: background-color, 원형을 위한 border-radius: 50%, 그리고 표준 여백을 사용합니다.
VectSharpAPI에서 IronPDF로 매핑 참조
이 매핑은 직접적인 API 대응을 보여주어 마이그레이션을 가속화합니다:
| VectSharp | IronPDF |
|---|---|
Document |
ChromePdfRenderer |
Page |
자동 |
Graphics |
HTML/CSS |
graphics.FillRectangle() |
CSS가 background-color에 <div> |
graphics.StrokeRectangle() |
CSS가 border에 <div> |
graphics.FillText() |
HTML 텍스트 요소 |
graphics.StrokePath() |
SVG 또는 CSS 테두리 |
GraphicsPath |
SVG <path> 요소 |
Colour.FromRgb() |
CSS 색상 값 |
Font / FontFamily |
CSS font-family |
doc.SaveAsPDF() |
pdf.SaveAs() |
| 수동 페이지 크기 조정 | RenderingOptions.PaperSize |
마이그레이션 전략
전략 1: 그리기 코드를 HTML/CSS로 변환
좌표 기반 그리기를 HTML 요소로 교체합니다:
// VectSharp
graphics.FillRectangle(100, 50, 300, 80, Colour.FromRgb(0, 102, 204));
graphics.FillText(110, 80, "Header", font, Colours.White);
//IronPDFHTML equivalent
<div style="
position: absolute;
left: 100px;
top: 50px;
width: 300px;
height: 80px;
background: rgb(0, 102, 204);
color: white;
padding: 10px;
">Header</div>
// VectSharp
graphics.FillRectangle(100, 50, 300, 80, Colour.FromRgb(0, 102, 204));
graphics.FillText(110, 80, "Header", font, Colours.White);
//IronPDFHTML equivalent
<div style="
position: absolute;
left: 100px;
top: 50px;
width: 300px;
height: 80px;
background: rgb(0, 102, 204);
color: white;
padding: 10px;
">Header</div>
' VectSharp
graphics.FillRectangle(100, 50, 300, 80, Colour.FromRgb(0, 102, 204))
graphics.FillText(110, 80, "Header", font, Colours.White)
' IronPDFHTML equivalent
'<div style="
' position: absolute;
' left: 100px;
' top: 50px;
' width: 300px;
' height: 80px;
' background: rgb(0, 102, 204);
' color: white;
' padding: 10px;
'">Header</div>
전략 2: 벡터 그래픽에 SVG 사용
복잡한 도형의 경우 HTML 내에 인라인 SVG를 사용합니다:
//VectSharppath
GraphicsPath path = new GraphicsPath();
path.MoveTo(100, 100);
path.LineTo(200, 50);
path.LineTo(300, 100);
path.Close();
graphics.FillPath(path, Colours.Blue);
//IronPDFSVG equivalent
<svg><polygon points="100,100 200,50 300,100" fill="blue"/></svg>
//VectSharppath
GraphicsPath path = new GraphicsPath();
path.MoveTo(100, 100);
path.LineTo(200, 50);
path.LineTo(300, 100);
path.Close();
graphics.FillPath(path, Colours.Blue);
//IronPDFSVG equivalent
<svg><polygon points="100,100 200,50 300,100" fill="blue"/></svg>
Imports System.Drawing.Drawing2D
'VectSharppath
Dim path As New GraphicsPath()
path.StartFigure()
path.AddLine(100, 100, 200, 50)
path.AddLine(200, 50, 300, 100)
path.CloseFigure()
graphics.FillPath(Brushes.Blue, path)
'IronPDFSVG equivalent
'<svg><polygon points="100,100 200,50 300,100" fill="blue"/></svg>
전략 3: JavaScript 차트 라이브러리 사용
과학적 시각화를 위해, IronPDF는 Chart.js, D3.js, 또는 Plotly와 같은 강력한 JavaScript 라이브러리를 활용할 수 있습니다:
var html = @"
<script src='https://cdn.plot.ly/plotly-latest.min.js'></script>
<div id='chart'></div>
<script>
Plotly.newPlot('chart', [{
x: [1, 2, 3, 4],
y: [10, 15, 13, 17],
type: 'scatter'
}]);
</script>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderHtmlAsPdf(html);
var html = @"
<script src='https://cdn.plot.ly/plotly-latest.min.js'></script>
<div id='chart'></div>
<script>
Plotly.newPlot('chart', [{
x: [1, 2, 3, 4],
y: [10, 15, 13, 17],
type: 'scatter'
}]);
</script>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderHtmlAsPdf(html);
Dim html As String = "
<script src='https://cdn.plot.ly/plotly-latest.min.js'></script>
<div id='chart'></div>
<script>
Plotly.newPlot('chart', [{
x: [1, 2, 3, 4],
y: [10, 15, 13, 17],
type: 'scatter'
}]);
</script>"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
Dim pdf = renderer.RenderHtmlAsPdf(html)
일반적인 마이그레이션 문제와 해결책
문제 1: 좌표 시스템 차이
VectSharp는 좌상단 기원에서 포인트를 사용하여 수동으로 배치합니다.
해결책: CSS 위치지정을 사용합니다:
.element {
position: absolute;
top: 50px;
left: 100px;
}
문제 2: 폰트 객체
VectSharp는 Font 및 FontFamily 객체를 프로그래밍 방식으로 생성합니다.
해결책: CSS font-family를 사용합니다:
<style>
body { font-family: Arial, sans-serif; font-size: 12pt; }
</style>
<style>
body { font-family: Arial, sans-serif; font-size: 12pt; }
</style>
문제 3: 색상 처리
VectSharp는 Colour.FromRgb() 메서드 호출을 사용합니다.
해결책: CSS 색상을 사용합니다:
.header { color: rgb(0, 102, 204); background-color: #f0f0f0; }
문제 4: 그래픽 경로
VectSharp는 MoveTo, LineTo, Arc 메서드가 포함된 복잡한 GraphicsPath API를 사용합니다.
해결책: 벡터 그래픽에 SVG를 사용합니다:
<svg>
<path d="M 100 100 L 200 50 L 300 100 Z" fill="blue"/>
</svg>
<svg>
<path d="M 100 100 L 200 50 L 300 100 Z" fill="blue"/>
</svg>
VectSharp마이그레이션 체크리스트
이동 전 작업
모든VectSharp사용을 식별하기 위해 코드베이스를 감사하세요:
grep -r "using VectSharp" --include="*.cs" .
grep -r "Graphics\|FillRectangle\|FillText" --include="*.cs" .
grep -r "using VectSharp" --include="*.cs" .
grep -r "Graphics\|FillRectangle\|FillText" --include="*.cs" .
문서 페이지 크기 ( new Page(595, 842) 패턴들 ). Colour.FromRgb()를 사용하는 색상 스킴을 주목하세요. 폰트 구성을 식별합니다. GraphicsPath을 사용하여 SVG 변환을 위한 복잡한 벡터 그래픽을 매핑하세요.
코드 업데이트 작업
1.VectSharpNuGet 패키지 제거
- IronPdf NuGet 패키지를 설치하세요
VectSharp에서IronPdf로 using 문을 업데이트하세요.FillRectangle호출을background-color가 포함된 CSS 박스로 변환하세요.FillText호출을 CSS 스타일링이 포함된 HTML 텍스트 요소로 변환하세요.GraphicsPath작업을 SVG<path>요소로 변환하세요.- 수동 페이지 관리를
RenderingOptions.PaperSize로 대체하세요. - 시작 시 라이선스 초기화를 추가
마이그레이션 후 테스트
마이그레이션 후 다음 측면을 검증:
-VectSharp버전과IronPDF버전 간의 시각적 출력 비교
Colour.FromRgb()값의 CSS 동등성을 사용하여 색상이 일치하는지 확인하세요.- 좌표 기반의 배치로부터 변환된 요소의 위치 정확도 확인
- 다중 페이지 문서에 대한 페이지 나누기 테스트
- SVG를 통해 벡터 그래픽이 올바르게 렌더링되는지 확인
IronPDF로 마이그레이션할 때의 주요 이점
VectSharp에서 IronPDF로 이동하는 것은 문서 생성에 몇 가지 이점을 제공합니다:
HTML 기반 콘텐츠: 웹 개발자는 기존의 HTML 및 CSS 기술을 활용할 수 있습니다. 좌표 기반의 그리기 API를 배울 필요가 없습니다.
자동 레이아웃: 텍스트 감싸기, 페이지 화, 플로우 레이아웃은 자동으로 수행됩니다. 요소 위치의 수동 계산이 필요하지 않습니다.
현대적인 CSS 지원: Flexbox와 Grid 레이아웃을 포함한 전체 CSS3 지원. 반응형 디자인은 PDF로 직접 변환됩니다.
JavaScript 실행: Chart.js, D3.js, Plotly와 같은 대화형 차트가 올바르게 렌더링됩니다. 동적 콘텐츠가 예상대로 작동합니다.
URL-to-PDF: VectSharp로는 불가능한 기능으로, 어떤 웹 페이지든 PDF로 캡처.
PDF 작업: 병합, 분할, 워터마크 추가, 비밀번호 보호, 디지털 서명이 내장 기능입니다.
코드 가독성 향상: HTML/CSS는 선언적이며 읽기 쉽습니다. 같은 문서가 VectSharp의 명령적 그리기 방식보다 훨씬 적은 코드가 필요합니다.
활발한 개발: .NET 10 및 C# 14의 채택이 2026년까지 증가함에 따라 IronPDF의 정기 업데이트는 현재 및 미래의 .NET 버전과의 호환성을 보장합니다.

