2017-12-27 21 views
1

나는 입력 데이터가 요구하는 수치를 가진 PDF 파일을 만들 프로그램을 만드는 임무를 가졌다. 이 이미지에서 우리는 입력 데이터가 무엇인지, 즉 크기, 도형 사이의 간격, 모양의 유형, 청사진 번호를 볼 수 있습니다. 실제 다이어그램이 어떻게 보이는지 아래에 있습니다. 프로젝트가 벡터 그래픽을 사용하는html 페이지 안에 svg의 크기 유지

input data above and actual graphics below

그것은 매우 중요합니다, 그래서 그들은 정말 유연하고있는 한 나는 SVGs를 사용하여 생각하고, 프로그램을 생성하기 위해 상대적으로 쉽습니다. 그런 다음 .NET 라이브러리 (Select.HtmltoPdf)를 사용하여 HTML 문자열을 PDF로 변환합니다. 이는 C#에서 직접 PDF를 디자인하는 것이 다리 사이의 고통이기 때문에 매우 편리합니다. HTML을 사용하면 CSS와 내가 익숙한 것을 사용하는 이점이 있습니다. 유일한 단점은 그 라이브러리를 사용하여 svg를 직접 렌더링 할 수 없다는 것입니다. 먼저 html 파일에 넣어야합니다.

HTML에 SVG를 삽입 한 다음 라이브러리를 사용하여 PDF로 렌더링 할 때 문제가 발생합니다. Corel Draw 또는 Adobe Illustrator에서 svg를 직접 열면 치수가 유지되고 모든 것이 그대로 유지됩니다. 그러나 파일의 확장명을 .html로 변경하고 Chrome에서 열고 PDF로 인쇄하거나 내 프로그램에서 직접 PDF를 렌더링하면 모양이 약간 축소됩니다.

내 질문은 HTML 페이지에 표시하는 동안 경로의 치수를 그대로 유지하는 방법입니다.

<svg x="0" y="0" width="215.9mm" height="279.4mm" viewBox="0 0 215.9 279.4"> 
<rect x="40" y="40" width="25" height="25" rx="1.5875" ry="1.5875" stroke="black" stroke-width="0.5" fill-opacity="1"/> 
<ellipse cx="20" cy="20" rx="20" ry="20" stroke="black" stroke-width="0.5" fill-opacity="0"/> 
</svg> 

그리고 기본적으로 주위 <html> 태그와 같은 SVG입니다 내가 사용하려고 해요 html로, :

여기에 내 현재 .svg입니다.

<!DOCTYPE html> 
 
<html> 
 
<meta HTTP-EQUIV="Content-Style-Type" CONTENT="text/css" CHARSET="UTF-8"/> 
 
<svg x="0" y="0" width="215.9mm" height="279.4mm" viewBox="0 0 215.9 279.4"> 
 
<rect x="40" y="40" width="25" height="25" rx="1.5875" ry="1.5875" stroke="black" stroke-width="0.5" fill-opacity="1"/> 
 
<ellipse cx="20" cy="20" rx="20" ry="20" stroke="black" stroke-width="0.5" fill-opacity="0"/> 
 
</svg> 
 
</html>

감사합니다!

답변

1

"모양이 약간 축소되어"정확히 무슨 뜻인지는 분명하지 않습니다.

하지만 문제는 CSS에서 "215.9mm"가 실제 세계 215.9mm와 같은 것을 의미하지 않는다는 것과 관련이 있습니다. CSS 값 "1in"(또는 "25.4mm")은 96 "CSS 픽셀"과 동일하게 정의됩니다. 화면에 표시되는 크기 또는 인쇄 할 때 크기를 결정하는 것은 브라우저의 몫입니다.

SVG가 HTML에 포함되면 HTML 페이지에서 "215.9mm"가 나타내는 것과 그로부터 생성 된 PDF를 결정하는 브라우저입니다. 또한 프린터 페이지 크기라고 생각하는 것에 맞게 HTML 페이지의 개념을 확장하기로 결정할 수도 있습니다.

벡터 소프트웨어가 PDF를 생성 할 때 PDF 크기 (A4 또는 기타)를 기준으로 길이 값을보다 정확하게 나타내야합니다.