ColdFusion 페이지를 PDF 다운로드로 변환하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/73964

  •  09-06-2019
  •  | 
  •  

문제

CFM 페이지에서 생성된 HTML을 PDF로 변환하고 사용자가 내 페이지를 탐색할 때 표준 "다른 이름으로 저장" 프롬프트를 표시하도록 하고 싶습니다.

도움이 되었습니까?

해결책

생성 중인 페이지 주위에 PDF를 배치하여 PDF를 생성하려면 cfdocument 태그(format="PDF" 포함)를 사용해야 합니다.파일 이름 속성을 지정해야 합니다. 그렇지 않으면 문서가 브라우저로 바로 스트리밍됩니다.

내용을 PDF로 저장한 후 cfheader와 cfcontent를 함께 사용하여 PDF를 첨부 파일로 출력하고("다른 이름으로 저장") 파일을 응답 스트림에 추가합니다.또한 파일 시스템을 파일로부터 깨끗하게 유지하기 위해 cfcontent 태그에 deletefile="Yes"를 추가했습니다.

<cfdocument format="PDF" filename="file.pdf" overwrite="Yes">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Hello World</title>
</head>
<body>
    Hello World
</body>
</html>
</cfdocument>
<cfheader name="Content-Disposition" value="attachment;filename=file.pdf">
<cfcontent type="application/octet-stream" file="#expandPath('.')#\file.pdf" deletefile="Yes">

여담으로:아래 예에서는 파일 이름으로 file.pdf를 사용하고 있지만 경쟁 조건으로 인해 발생하는 문제를 피하기 위해 파일 이름으로 임의 또는 세션 생성 문자열을 사용할 수도 있습니다.

다른 팁

PDF를 전혀 저장하지 않으려면 파일 이름 없이 cfdocument를 사용하면 cfheader 및 cfcontent를 사용하지 않고 pdf(플래시페이퍼)가 브라우저로 직접 전송됩니다.

경고:cfheader/cfcontent를 사용할 때와 마찬가지로 캐시가 브라우저에 플러시되기 전에 이 작업을 수행해야 합니다. 기본적으로 파일을 저장할 필요 없이 동일한 작업을 수행하기 때문입니다.

콘텐츠를 얻으려면 아마도 동일한 호출/포함/등을 감싸는 cfsavecontent를 사용할 것입니다.두 가지 주요 예외를 제외하고 페이지를 생성합니다.cfdocument에는 외부 스타일시트에 문제가 있는 것 같으므로 포함을 사용하여 스타일을 문서에 직접 넣는 것이 아마도 좋은 생각일 것입니다.대신 @import를 사용해 볼 수 있습니다. 일부 사람들에게는 작동합니다.또한 이미지에 대한 상대적인 링크는 때때로 깨질 수 있으므로 주의해야 합니다.

그만큼 <cfdocument> 접근 방식은 승인된 방법이지만 기존 PDF 문서를 조작하는 방식으로 가능한 모든 것을 제공하지는 않습니다.저는 미리 디자인된 인쇄 해상도 PDF 템플릿을 사용하여 쿠폰을 생성해야 하는 프로젝트를 진행했습니다. <cfdocument> 대략적인 출력을 보여주겠지만 HTML에 포함된 비트맵 이미지만 사용하면 됩니다.사실, 큰 이미지를 만들고 HTML로 크기를 조정하여 인쇄 해상도를 위조할 수 있었지만 원본은 훌륭하고 깨끗한 벡터 이미지 파일이어서 대신 그것을 사용하고 싶었습니다.

나는 결국 사본을 사용했다. <cfx_pdf> 일을 끝내기 위해.(개발자 사이트, CF 태그 스토어) PDF 양식 작성, 권한 설정, 파일 병합, 벡터 그래픽, 테이블 및 텍스트 그리기, 사용자 정의 글꼴 사용 등을 포함하여 기존 PDF 문서를 조작할 수 있는 Java PDF 라이브러리에 대한 CF 래퍼입니다.기꺼이 작업한다면 꽤 놀라운 결과를 얻을 수 있을 것입니다.

한 가지 단점은 개발자가 이 제품을 오랫동안 목초지에 방치해 두었다는 것입니다.개발자 사이트는 여전히 저작권 2003이며 ColdFusion MX 6.1 이후의 내용은 언급하지 않습니다.결국 몇 가지 버그를 수정하고 필요한 대로 작동하도록 하기 위해 암호화된 템플릿 중 일부를 깨뜨려야 했습니다.그럼에도 불구하고 이는 강력한 도구입니다.

나는 ColdFusion에 익숙하지 않지만 사용자가 애플리케이션/옥텟 스트림으로 요청할 때 페이지의 Content-Type을 설정해야 합니다.그러면 매번 다운로드하라는 메시지가 표시됩니다.

도움이 되었기를 바랍니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top