2009-08-28 3 views
29

특정 크기 (A4)로 인쇄하려는 SVG 파일을 자동으로 생성하려고합니다. 나는 절대 단위가 아닌 '사용자 단위'만 허용하는 경로를 사용하고자합니다.SVG 및 DPI, 절대 단위 및 사용자 단위 : Inkscape vs. Firefox vs. ImageMagick

절대 단위 (예 : 문서 크기)와 경로 (어디서나)이있는 SVG 파일을 '게시'하는 것은 불가능합니다. 뷰어간에 제대로 작동하지 못하기 때문입니다.

'기본 DPI'를 지정하는 것과 같이 렌더링의 일관성을 유지할 수있는 방법이 있습니까?

또는 다른 말로 표현 : 절대 단위를 전혀 버리지 않고 모든 뷰어에서 동일한 예를 렌더링하려면 아래 예제를 사용할 수 있습니까?

관련 항목 : 아래의 응용 프로그램 중 하나를 다른 것과 같은 방법으로 이미지를 렌더링하도록 강제하는 방법이 있습니까? (예 : 내가 '변환'의 -density 옵션을 시도하지만 잉크 스케이프 나 파이어 폭스 출력과 일치하는 결과를 가져올 수 없습니다.)


예 : 나는 하나 개의 SVG 파일을 생성 한

,

  • 왼쪽 : 광장과 사용자 단위로 대각선
  • 중동 : 빨간색 대각선 (경로)와 세 검은 사각형 (RECT)와 광장과 인치 대각선 (나에게 가장 논리적 인 선택을 보였지만,이다 허용되지 않음)
  • 오른쪽 :

    • 잉크 스케이프 : 90 DPI, 모든 사각형 같은 크기, 빨간색 대각선 일치
    • 파이어 폭스 : (96)를 다른 시청자 다르게 렌더링 사용자 단위

    에서, mm의 정사각형 대각선 DPI ?,을 후자의 큰 사각형 (또는 짧은 대각선)

  • 변환 : 72 DPI로 후자의 작은 정사각형 (또는 긴 대각선)
,

Code :

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<svg 
    xmlns:svg="http://www.w3.org/2000/svg" 
    xmlns="http://www.w3.org/2000/svg" 
    version="1.1" 
    width="200mm" 
    height="100mm" 
    > 
    <g transform="translate(50,50)"> 
    <rect 
     width="100." 
     height="100." 
     x="10" 
     y="10" /> 
    <path style="stroke: #ff0000" d="M 10 10 L 110 110" /> 
    </g> 
    <g transform="translate(200,50)"> 
    <rect 
     width="1.111in" 
     height="1.111in" 
     x="0.1111in" 
     y="0.1111in" /> 
    <path style="stroke: #ff0000" d="M 0.1111in 0.1111in L 1.111in 1.111in" /> 
    </g> 
    <g transform="translate(350,50)"> 
    <rect 
     width="1.111in" 
     height="1.111in" 
     x="0.1111in" 
     y="0.1111in" /> 
    <path style="stroke: #ff0000" d="M 10 10 L 110 110" /> 
    </g> 
</svg> 

잉크 스케이프 (내 기본 '뷰어') :

Alt text

파이어 폭스 (빨간 선이 오른쪽 하단에 도달하지 않습니다. 나는 스크린 샷을 만든) 종류의 임의립니다 :

Firefox

ImageMagick이 (변환을, 주어진 파일 이름 외에 옵션 없음)하십시오 경로 태그

Alt text

+0

문제를 설명하는 데 유용한 http://stackoverflow.com/questions/1132269/can-i-use-mixed-units-with-path-element가 있습니다. – BlackShift

+1

Inkscape [0.92] (http://wiki.inkscape.org/wiki/index.php/Release_notes/0.92#Important_changes) : 기본 해상도가 CSS 표준과 일치하도록 90dpi에서 96dpi로 변경되었습니다. – qwert2003

답변

25

모든 치수 사용자 단위입니다.

당신은 중앙 광장 경로가 렌더링되지 않는 이유입니다 경로 태그 내에서 절대 단위를 지정할 수 없습니다.

내가 찾은 가장 간단한 방법은 뷰 박스 사용하여 단위를 설정하는 것입니다 :

  • 인치의 폭 & 높이를 설정합니다.
  • 그런 다음보기 상자를 동일하게 설정하십시오.
  • 사용자 단위를 1 인치로 설정합니다.
  • 모든 크기는 다음 인치에 명시되어있다 (참고 : 나는 상대 이동을 지정하는 경로 태그에 소문자 L을 사용)

이 잉크 스케이프와 파이어 폭스에서 제대로 표시됩니다.

<svg 
    xmlns:svg="http://www.w3.org/2000/svg" 
    xmlns="http://www.w3.org/2000/svg" 
    version="1.1" 
    width="8in" 
    height="4in" 
    viewBox="0 0 8 4"> 

    <g transform="translate(4,0.5)"> 
     <rect 
      width="1.111" 
      height="1.111" 
      x="0.1111" 
      y="0.1111" /> 
     <path d="M 0.1111,0.1111 l 1.111 1.111" style="stroke: #ff0000;stroke-width:0.01" /> 
    </g> 
</svg> 
+0

이것은 실제로 예상대로 작동하는 것 같습니다! inkscape, ff 및 convert로 생성 된 이미지는 모두 동일하게 보이지만 기본 dpi의 96:90:72 비율에 해당하는 크기가 다릅니다. 적어도 inkscape에서 이것은 변경하기 쉽습니다. 누구나 같은 방법으로 변환하도록 변환하는 방법은?. inkscape와 convert 모두 1.1111 인치 크기의 선을 인쇄하는 pdf 파일을 만들 수 있습니다. – BlackShift

+0

아마도 변환에서 -density 옵션을 이해하지 못합니다. 이것은 작동합니다 : 기본 dpi를 72에서 FFs 96으로 변경하려면 밀도 (입력 파일 용)로 sqrt (96 * 72) = 83.1을 지정해야합니다. 따라서 'convert -density 83.1 inputfile.svg outputfile.png'는 firefox와 동일한 이미지를 제공합니다. – BlackShift

+0

@BlackShift ImageMagick의'convert' 명령은 (입력 파일을 지정하기 전에)'-density XX' 인수를 취해 해상도를 설정합니다. – Caleb

1

나는 iText를 사용하여 PDF 파일에 SVG 파일을 포함하는 Apache Batik를 사용하여 비슷한 문제가 있었다. iText는 PDF의 표준 인 72  을 사용하며 바틱은 96을 사용합니다.

이미지가 올바르게 나타나게하려면, PDF 파일에서 크기를 조정하려면 폭 = x cm 높이 = SVG 헤더의 y cm은 1.33 (96/72)입니다.

관련 문제