2010-03-04 11 views
8

각 보고서 페이지가 <div class="page"> 인 HTML 보고서가 있습니다. 페이지 클래스는 내가 갑자기 모든 실제 보고서 페이지 뒤에 삽입 빈 페이지를 얻고, 보고서를 PDF로 변환 할 abcPDF를 호출 할 때, 내 보고서 내용에 약간 변경 한 후abcPDF를 사용하여 HTML을 PDF로 변환 할 때 여분의 빈 페이지

width: 180mm; 
height: 250mm; 
page-break-after: always; 
background-position: centre top; 
background-image: url(Images/MainBanner.png); 
background-repeat: no-repeat; 
padding-top: 30mm; 

으로 정의된다. 이 문제를 제거하기 위해 방금 변경 한 내용을 롤백하고 싶지 않으므로 추가 페이지가 삽입되는 이유를 다른 사람이 알기를 바랍니다.

답변

7

동일한 정확한 문제가 발생했습니다. 빈 페이지는 page-break-after로 인해 발생합니다. 항상;은 CSS에 있습니다. 뿐만 아니라 ABCpdf뿐만 아니라 인쇄 된 여분의 페이지가 나올 것입니다. 그래서 다음 코드를 사용하여 마지막 페이지를 제거했습니다. MyDoc.Delete (MyDoc.Page);

그러나 이것은 다른 종류의 문제를 유발합니다. IE 8이있는 개발 서버에서 여분의 빈 페이지가 생기고 IE6이있는 곳에서 추가 빈 페이지가 생기지 않습니다. 그래서 빈 페이지를 찾는 방법을 보여주기 위해 websupergoo에서 지원 팀에게 이메일을 보냈습니다. 아이디어는 PDF를 통해 반복하고 모든 빈 페이지를 식별하고 위의 논리를 사용하여 삭제하는 것입니다.

그리고 나는 두 번째 Jakkwylde의 의견. Websupergoo 여러분은 매우 도움이되고 신속하게 대응할 수 있습니다. 나는 ABCpdf가 64 비트에서 작동하도록하는 데 또 다른 문제를 겪었고 그것을 알아 내려고 거의 하루를 보냈다. 그들은 나에게 시도 할 수있는 여러 시나리오를 제공했다. 그들의 지원이 돈에 맞았고 앱을 몇 분 만에 실행했습니다.

+0

은 서로 다른 환경에서 다른 IE 버전에서 동일한 문제가 있었다 내 스타일 시트이 있습니다. 나는 같은 접근법을 따른다. 그리고 그것은 지금까지 나에게 잘 맞았다. –

+0

빈 페이지를 제거하기 위해 아래에 게시 한 코드를 찾으십시오. –

1

abcPDF가 이상하고 예측할 수없는 것으로 나타났습니다. 즉, 일어날 수있는 것은 페이지 크기와 페이지 나누기의 조합이 범인이 될 수 있다는 것입니다. 페이지 높이를 줄이거 나 페이지 나누기를 제거하십시오.

2

AddImageUrl 방법을 사용하는 경우 HTML 마크 업의 유효성을 다시 한 번 알아볼 필요가 있습니다. 렌더링 된 PDF가 예상치 못한 결과를 가져올 수있는 경우가 있습니다.

WebSuperGoo는 뛰어난 성능과 뛰어난 지원을 제공합니다. 종종 소스 코드를 보내면 해결 방법을 제안하거나 구현 대안을 제공 할 수 있습니다.

0

Kush는 "나는 똑같은 문제를 겪었습니다. 빈 페이지는 CSS에서 항상 페이지 중단 다음으로 인한 것입니다 : CSS에서, ABCpdf뿐만 아니라 인쇄 된 페이지는 추가 페이지를 뱉어 낼 것입니다. . "

div에 "page-break-after : always"가있는 경우 IE는 문자 그대로 항상 새 페이지를 시작하고 아무 것도 추가되지 않으면 그냥 공백으로 인쇄됩니다. Firefox는 그렇지 않습니다.

abcpdf는 IE8 렌더링 엔진을 사용하므로 빈 페이지가됩니다. OP의 목적을 위해, 단지 명시적인 높이를 사용하면 문제가 해결되고, 엔진은 페이지 나누기를 삽입합니다.

콘텐츠를 2 페이지로 가져갈 수 있기 때문에 높이를 명시 적으로 설정할 수없는 비슷한 문제를 해결하려고합니다. (각 페이지는 한 사람에 해당하며 각 사람은 인쇄 할 때 새 페이지에서 시작해야합니다.) 나는 abcpdf에게도 빈 페이지를 감지 할 수있는 해킹 픽스가 있는지를 이메일로 보냈지 만, 근원적 인 문제를 해결하고 css가 IE8을 해킹하여 빈 페이지가없는 경우 최종 페이지를 인쇄하지 못하도록하는 방법을 알고 있다면 궁금합니다. 나는 그것이 가능하지 않다고 생각하지만 분명히 뭔가를 놓치지 않고 있는지 확인하고 싶었습니다.

0

ABCPDF의 AddImageURL() 방법은 새로운 빈 페이지를 만드는 필수 영역 내에서 HTML을 단단히 렌더링하지 않는 느슨하게 바인딩하는 방법입니다.

Doc theDoc = new Doc(); 
theDoc.Page = theDoc.AddPage(); 

int theID = 0; 
theDoc.SetInfo(0, "CheckBgImages", "1"); 
theDoc.SetInfo(0, "RenderDelay", "5000"); 
theDoc.HtmlOptions.Engine = EngineType.MSHtml; 
theID = theDoc.AddImageHtml(HTML); 

while (true) 
{ 
if (!theDoc.Chainable(theID)) 
       break; 
      theDoc.Page = theDoc.AddPage(); 
      theID = theDoc.AddImageToChain(theID); 
     } 

     for (int i = 0; i <= theDoc.PageCount; i++) 
     { 
      theDoc.PageNumber = i; 
      theDoc.Flatten(); 
     } 

     theDoc.Save(HttpContext.Current.Server.MapPath(Path)); 
     theDoc.Clear(); 

그것은 항상 정확한 결과를 제공합니다 .. PDF로 원하는 HTML로 변환 AddImageHTML() 방법을 사용하려고합니다.

2
protected void RemoveBlankPages(Doc pdf) 
{ 
    for (int i = pdf.PageCount; i > 0; i--) 
    { 
     pdf.PageNumber = i; 

     //get the pdf content 
     string textContent = pdf.GetText("Text"); 

     //delete the page if it is blank 
     if (string.IsNullOrEmpty(textContent)) 
      pdf.Delete(pdf.Page); 
    } 
} 
+1

한 페이지에 이미지 만있는 경우에는 작동하지 않습니다. – socketman

0

마지막 페이지에서 페이지가 깨지는 것을 방지하기 위해 다음과 같은 작업을 수행했습니다.

마지막 페이지에 페이지 나누기가 없는지 확인했습니다. 항상 이것이 angularJS와 같은 템플릿 또는 프런트 엔드 프레임 워크에서 수행 할 수 있지만이 예제에서는 블레이드 템플릿을 사용합니다 (그러나 PHP는) ...

@if ($last_page) 
    <div class='footer last-page'> 
@else 
    <div class='footer'> 

을 할 것입니다 그리고 나는

.footer { 
    page-break-after:always; 
} 

.last-page { 
    page-break-after:avoid; 
} 
관련 문제