ItextSharp를 사용하여 다른 필드를 채울 때 PDF에서 포맷 및 계산을 강제로하려면 어떻게해야합니까?

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

문제

여러 텍스트 필드가있는 PDF 양식이 있습니다. 이 필드에 입력 된 값은 다른 필드의 값을 계산하는 데 사용됩니다 (계산 된 필드는 읽기 전용).

Adobe Reader에서 양식을 열고 필드를 작성하면 계산 된 필드가 자동으로 다시 계산됩니다.

그러나 ITEXTSHARP를 사용하여 필드를 채우고 결과 양식을 평평하게 한 다음 평평한 양식을 웹을 통해 사용자에게 다시 스트리밍하고 있습니다.

이 부분은 계산 된 필드가 계산하지 않는 것을 제외하고는 잘 작동합니다. 사용자 트리거 이벤트 (키 다운 또는 포커스 또는 블러와 같은)가 발사되지 않기 때문에 계산이 발생하지 않기 때문입니다.

분명히, 나는 필드를 채우는 형태에서 계산을 제거하고 필드를 채우면서 서버에서 모든 것을 할 수 있지만, 서버뿐만 아니라 인간이 채울 수있는 형식을 사용할 수 있기를 바랍니다.

계산을 강요하는 방법을 아는 사람이 있습니까?

편집 : 나는 너무 많은 느낌이 들지 않아 Itext/itextsharp 사랑 ...

자세한 내용은 다음과 같습니다. Stamper.acrofields.generateApearances를 True로 설정하는 것은 도움이되지 않습니다.

생각한다 대답은 페이지 조치 어딘가에 있지만 그것을 트리거하는 방법을 모르겠습니다 ...

도움이 되었습니까?

해결책

Paulo Soares (ITEXT의 주요 개발자 중 하나 및 ITEXTSHARP의 현재 관리자) 말한다:

ITEXT는 대부분의 시간이 불가능하기 때문에 계산 된 필드를 수정하기 위해 어떤 노력도하지 않습니다. pdfcopyfields는 때때로 작동하고 때로는 작동하지 않는 지원을 제공합니다.

다른 팁

나는 이것을하는 방법을 알아 냈습니다. stackoverflow 질문에 대한 내 대답을 참조하십시오.

계산되지 않은 필드에서 형식을 새로 고치는 방법 및 충전 가능 PDF 형식의 계산 필드

DOC 객체에서 JavaScript Method CalculatEnow를 호출하여 PDFS의 모든 계산 된 필드를 업데이트했습니다.

Adobe JavaScript 문서에 따르면 this.calculateNow();

현재 문서에서 모든 계산 필드의 계산을 강요합니다.

양식에 많은 계산이 포함되어 있으면 계산 필드가 아니더라도 사용자가 데이터를 필드에 입력 한 후에는 상당한 지연이 발생할 수 있습니다. 한 가지 전략은 어느 시점에서 계산을 끄고 나중에 다시 켜는 것입니다 (예 참조).

itextsharp와 함께 JavaScript 통화를 포함하려면 :

using (PdfReader pdfReader = new PdfReader(pdfTemplate))
using (PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(newFile, FileMode.Create)))
{
    // fill f1 field and more...
    AcroFields pdfFormFields = pdfStamper.AcroFields;
    pdfFormFields.SetField("f1", "100");
    //...

    // add javascript on load event of the pdf
    pdfStamper.JavaScript = "this.calculateNow();";
    pdfStamper.Close();
}

서버 측면에서 계산 된 필드에 답이 있는지 확인하십시오. 그렇지 않은 경우 계산하십시오.

Greg Hurlman이 말했듯이 서버에서 직접 계산해야합니다. 이것은 단순한 편의 이상의 것이기 때문에 실제로 그에 대한 좋은 이유가 있습니다.

고객이 보유한 모든 파일은 망할 가능성이 있습니다. 나는 PDF 양식이 무엇인지 모르겠지만, 어떻게 든 돈과 연결되어있을 가능성이 높으므로 계산에 잘못된 결과를 보여 주면 사람들이 속임수가 될 수있는 잠재력이 존재합니다. 클라이언트 측에서 수행 된 계산을 신뢰하면 감지 할 방법이 없습니다.

클라이언트로부터 PDF 양식을 받으면 모든 계산이 올바른 것을 알 수 있도록 모든 계산을 다시 수행해야합니다. 그런 다음 클라이언트의 버전이 비교할 경우, ISS가 망가 졌는지 확인해야합니다.

고객이 그렇게 신뢰할 수 없다고 생각하지 않습니까? 당신에게 좋지만 증거는 동의하지 않습니다. 프로그래밍에 대한 가장 초기 소개 중 하나는 SimCity가 더 많은 돈을 줄 수있는 SaveGames를 열었습니다. 어떤 식 으로든 속임수가 발생하면 어떤 시점에서 사람들은 그것을 시도 할 것입니다.

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