! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

GcExcel(.NET Core 및 Java)로 PDF 양식 생성 > 블로그 & Tips

본문 바로가기

Java & Kotlin API

블로그 & Tips

GcExcel(.NET Core 및 Java)로 PDF 양식 생성

페이지 정보

작성자 GrapeCity 작성일 2021-01-28 15:33 조회 2,486회 댓글 0건

본문

PDF 양식은 다양한 플랫폼에서 다양한 클라이언트 측 도구를 사용해 문서를 열고 양식 필드에 입력한 다음, 파일에 포함된 양식 필드 값과 함께 새 PDF 문서로 저장하는 사용자에게 이식 가능한 크로스 플랫폼 문서를 전송하는 데 매우 유용합니다. 


이 파일은 양식을 처리해야 하는 모든 사용자에게 반환되거나 전달되고, 자동화된 도구는 이 파일에서 양식 필드를 쉽게 추출합니다. 이것은 설문조사 및 질문지, 기록 배포나 보험 용도의 의료 양식, 법률 및 세무 양식 등 다양한 양식을 위한 일반적인 사용 사례입니다.


이제 GrapeCity Documents for Excel을 통해 Excel 템플릿 스프레드시트 문서에서 풍부하고 복잡한 PDF 양식을 쉽게 만들 수 있습니다. Excel 템플릿 워크시트의 양식 레이아웃과 문서에 PDF 양식 필드가 있는 셀의 특수 템플릿 구문을 활용해 PDF 양식을 쉽게 만들 수 있습니다.


이 구문은 풍부하고 유용하며, 여러 개의 이벤트 처리기를 비롯한 수많은 PDF 양식 필드를 지원합니다. 이 처리기에는 JavaScript for Acrobat을 사용해 연결된 JavaScript 작업이 있습니다.


PDF 필드의 JSON 구문


GrapeCity Documents for Excel은 새로운 양식 속성을 지원하는 Excel 템플릿 워크시트의 콧수염 구문을 사용해 PDF 양식 필드를 지정합니다. PDF 양식 필드 속성은 표준 JSON 구문을 사용해 지정되며 JavaScript 코드의 코드 조각을 포함할 수 있습니다.


다음은 새로운 PDF 양식 필드 구문의 몇 가지 예시입니다.


  1. {{ds1.Team(R=B6:F7, form={"type": "checkbox", "name": "teams","font":{"size":10, "color": "#ffff00", "bold": true}, "checkstyle": "Circle"})}}

  2. {{ds1.Name(form={"type": "textbox", "name": "username", "value": "Input your name!","font":{"size":15, "color": "#ff0000", "bold": true}, "required": true})}}

  3. {{(form={"type": "listbox", "name": "cities", "value": ["Xi'An", "BeiJing"],"font":{"size":11, "color": "#ff00ff", "bold": true}, "required": true})}}

  4. {{(form={"type": "combobox", "name": "dates", "value": ["2019", "2020", "2021", "2022"],"font":{"size":11, "color": "#ff00ff", "bold": true}, "required": true})}}


예시 1에서는 크기가 10이고 노란 색상굵은 텍스트인 글꼴을 사용해 스타일 checkbox의 체크스타일teams라는 checkbox 필드를 지정합니다.


예시 2에서는 크기가 15이고 빨간 색상굵은 텍스트인 글꼴을 사용해 "Input your name!" 값과 함께 username이라는 textbox 필드를 양식에서 필수인 필드로 지정합니다.


예시 3에서는 크기가 11인 자홍 색상굵은 텍스트인 글꼴을 사용해 ["Xi'An", "BeiJing"]이라는 JavaScript 문자열 배열을 표시하는 과 함께 cities라는 listbox 필드를 양식에서 필수인 필드로 지정합니다.


예시 4에서는 크기가 11인 자홍 색상굵은 텍스트인 글꼴을 사용해 2019-2022 연도를 나열하는 JavaScript 문자열 배열을 표시하는 과 함께 dates라는 combobox 필드를 양식에서 필수인 필드로 지정합니다.


일반적인 PDF 양식 필드 속성


위 예시에 나와 있는 것처럼 모든 PDF 양식 필드 형식에 적용할 수 있는 다양한 PDF 양식 필드 속성이 있습니다. 아래 표에서 설명하는 이름이 지정된 식별자는 대소문자를 구분합니다.


참고: 아래 표는 여기에 있는 문서의 전체 표에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.

 이름

설명 

 type

필드의 형식을 나타냅니다. 

 alternateName

필드에 커서를 가져가면 양식 필드에 어떻게 입력할지 망설이는 사용자에게 유용한 도구 설명 텍스트를 표시합니다.

 backgroundcolor

필드의 배경색을 지정합니다.

 border

필드를 둘러싸는 테두리를 지정합니다.

 font

필드의 글꼴을 지정합니다.

 locked

사용자가 필드의 속성을 변경할 수 있는지 여부를 나타냅니다.

 Name

필드의 고유한 이름을 나타냅니다.

 readOnly

사용자가 필드의 값을 변경할 수 있는지 여부를 나타냅니다.

 required

처리할 양식에 대한 값이 필드에 있어야 하는지 여부를 나타냅니다.

 printed

(사용자가 인쇄를 선택하면) 지정된 필드가 문서의 다른 모든 필드와 함께 인쇄되는지 여부를 나타냅니다.

 hidden

필드를 화면에 표시할지 여부를 나타냅니다.

 mouseUp

필드의 활성 영역에서 마우스 버튼을 놓으면 순차적으로 수행될 작업을 나타냅니다.

 mouseDown

필드의 활성 영역에서 마우스 버튼을 누르면 순차적으로 수행될 작업을 나타냅니다.

 mouseEnter

마우스 버튼이 필드의 활성 영역에 들어가면 순차적으로 수행될 작업을 나타냅니다.

 mouseExit

마우스 버튼이 필드의 활성 영역에서 나오면 순차적으로 수행될 작업을 나타냅니다.

 onFocus

주석이 입력 포커스를 수신하면 순차적으로 수행될 작업을 나타냅니다.

 onBlur

주석이 입력 포커스를 상실하면 순차적으로 수행될 작업을 나타냅니다.

 format

현재 값을 표시하도록 필드 형식이 지정되기 전에 수행할 JavaScript 작업을 나타냅니다. 이 작업에서는 형식을 지정하기 전에 필드의 값을 수정할 수 있습니다.

 validate

필드 값이 변경되면 수행될 JavaScript 작업을 나타냅니다. 이 작업에서는 새 값의 유효성을 검사할 수 있습니다.

 calculate

다른 필드의 값이 변경되면 이 필드의 값을 다시 계산하기 위해 수행될 JavaScript 작업을 나타냅니다.

 keystroke

사용자가 텍스트 필드나 combobox에 키를 입력하거나 스크롤 가능 listbox에서 선택한 값을 수정하면 수행될 JavaScript 작업을 나타냅니다. 이 작업에서는 키 입력의 유효성을 검사하여 키 입력을 거부하거나 수정할 수 있습니다.




동작 JSON 개체


위의 이벤트 처리기 속성 중 다수는 특수 동작 JSON 개체를 사용해 복잡한 반응형 및 동적 양식을 만들 수 있도록 지원하는 동작을 지정합니다.


지정된 JavaScript는 이스케이프된 문자를 사용해 따옴표, 라인 피드, 캐리지 리턴, JSON에 포함될 때 이스케이프가 필요한 기타 문자를 포함해야 합니다. 동작 JSON 개체에는 다음과 같은 속성이 있습니다(대소문자를 구분하지 않음).


참고: 아래 표는 여기에 있는 문서의 전체 표에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.

 이름

 설명

 script

스크립트가 JavaScript 인터프리터로 컴파일되고 실행되게 하는 작업을 나타냅니다.

 submit

선택한 대화형 양식 필드의 이름 및 값을 지정된 URL(Uniform Resource Locator)로 전송하는 작업을 나타냅니다. 이 URL은 이름과 값을 처리하여 응답을 전송할 웹 서버의 주소일 수 있습니다.

 reset

재설정 작업에 포함하거나 작업에서 제거할 필드 이름을 설명하는 JSON 개체입니다.




형식별 PDF 양식 필드 속성


일부 PDF 양식 필드 속성은 특정 PDF 양식 필드 형식에만 적용할 수 있습니다. 다음 표에는 각 PDF 양식 필드 형식에 사용할 수 있는 속성이 나열되어 있습니다.


checkbox별 설정

참고: 아래 표는 여기에 있는 문서의 전체 표에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.

 이름

 설명

 checkStyle

체크 표시의 스타일입니다.

 value

이 값이 없으면 GcExcel이 셀의 값을 부울로 자동 변환한 다음, 템플릿 처리 후 이 속성으로 설정합니다.

 defaultValue

사용자가 처음 양식을 열었을 때 checkbox가 선택되어 있게 할지 여부를 나타내는 값입니다.


textbox별 설정 

참고: 아래 표는 여기에 있는 문서의 전체 표에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.

 이름

 설명

 value

textbox에 표시할 값입니다.

 defaultValue

사용자가 처음 양식을 열면 textbox에 표시할 기본값입니다.

 combo

포인팅 장치로 선택한 후 바로 새 값이 커밋되는지 여부를 나타냅니다.

 password

필드가 화면에 표시되지 않아야 하는 보안 암호를 입력하기 위한 것인지 여부를 나타냅니다.

 spellcheck

필드에 입력된 텍스트의 맞춤법을 검사할지 여부를 나타냅니다.

 scrollable

필드를 스크롤하여 주석 직사각형에 맞는 텍스트보다 더 많은 텍스트를 채울 수 있는지 여부를 나타냅니다.

 maxLen

문자로 표시되는 필드 텍스트의 최대 길이입니다.

 multiline

필드에 여러 줄의 텍스트를 포함할 수 있는지 여부를 나타냅니다.

 justification

필드의 텍스트를 표시하는 데 사용될 양쪽 맞춤입니다.

 
listbox별 설정

참고: 아래 표는 여기에 있는 문서의 전체 표에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.


 이름

 설명

 value

listbox에 표시될 항목의 목록입니다.

 commitOnSelChange

포인팅 장치로 선택한 후 바로 새 값이 커밋되는지 여부를 나타냅니다.

 selectedIndex

선택한 항목의 인덱스입니다(한 개의 항목을 선택한 경우).

 sort

필드의 옵션 항목이 알파벳순으로 정렬되어야 하는지 여부를 나타냅니다.

 selectedIndexes

선택한 항목의 인덱스입니다(두 개 이상의 항목을 선택한 경우).

 multiSelect

두 개 이상의 옵션 항목을 동시에 선택할 수 있는지 여부를 나타냅니다.

 exportValue

이 listbox 필드의 내보내기 값입니다.

 

combobox별 설정

참고: 아래 표는 여기에 있는 문서의 전체 표에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.

 이름

설명 

 value

combobox에 표시될 항목의 목록입니다.

 commitOnSelChange

포인팅 장치로 선택한 후 바로 새 값이 커밋되는지 여부를 나타냅니다.

 selectedIndex

선택한 항목의 인덱스입니다.

 sort

필드의 옵션 항목이 알파벳순으로 정렬되어야 하는지 여부를 나타냅니다.

 spellCheck

필드에 입력된 텍스트의 맞춤법을 검사할지 여부를 나타냅니다.

 editable

combobox에 드롭다운 목록뿐 아니라 편집 가능한 textbox도 포함되는지 여부를 나타냅니다.

 exportValue

이 combobox 필드의 내보내기 값입니다.


라디오 버튼별 설정

참고: 아래 표는 여기에 있는 문서의 전체 표에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.

 이름

 설명

 checkStyle

체크 표시의 스타일입니다.

 groupName

라디오 버튼 그룹의 이름입니다. 그룹 이름이 동일한 라디오 버튼은 동일한 그룹에 추가됩니다. 이 값이 없으면 GcExcel은 동일한 템플릿 셀에서 확장된 라디오 버튼을 템플릿 처리 후 동일한 그룹에 자동으로 추가합니다.

 radiosInUnison

켜짐 상태에 동일한 값을 사용하는 라디오 버튼 필드 내 라디오 버튼 그룹이 동시에 켜지고 꺼지는지 여부, 즉 하나를 선택하면 모두 선택되는지 여부를 나타냅니다. 선택을 취소하면 버튼은 상호 배타적입니다(HTML 라디오 버튼과 동일한 동작).

 checkedChoice

옵션이 선택된 값을 나타냅니다.

 defaultCheckedChoice

사용자가 양식을 처음 열 때 선택되는 옵션 값을 나타냅니다.

 

groupName이 동일한 라디오 버튼은 동일한 그룹에 속합니다. RadiosInUnison, checkedChoice, defaultCheckedChoice: 이 세 가지 설정은 라디오 버튼 그룹에 속하며, 이 설정의 값은 마지막으로 지정된 값을 기준으로 합니다.


푸시 버튼별 설정:

참고: 아래 표는 여기에 있는 문서의 전체 표에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.

 이름

 설명

 highlighting

주석의 강조 표시 모드를 나타냅니다.

 caption

버튼의 캡션을 나타냅니다.

 image

버튼의 이미지를 나타냅니다.

 captionImageRelation

이미지를 기준으로 버튼의 캡션을 배치하는 방법을 나타냅니다.

 downCaption

사용자가 버튼을 누를 때 버튼의 캡션을 나타냅니다.

 downImage

사용자가 버튼을 누를 때 버튼의 이미지를 나타냅니다.

 rolloverCaption

사용자가 마우스 버튼을 누르지 않고 커서를 활성 영역으로 이동할 때 버튼의 캡션을 나타냅니다.

 rolloverImage

사용자가 마우스 버튼을 누르지 않고 커서를 활성 영역으로 이동할 때 버튼의 이미지를 나타냅니다.

 imageScale

이미지 배율을 나타냅니다.

 

서명별 설정

참고: 아래 표는 여기에 있는 문서의 전체 표에서 발췌한 것입니다. 값 유형과 예시는 이 문서를 참조하시기 바랍니다.

 이름

 설명

 lockType

잠긴 필드의 형식을 나타냅니다.

 fieldNames

lockType 속성에 따라 처리에 포함하거나 처리에서 제외해야 할 필드 이름의 목록을 나타냅니다.

 LockedFields

SignatureFormField에 서명이 되면 필드를 잠글지 여부를 나타냅니다.


PDF 양식 필드로 Excel 템플릿에 데이터 바인딩 


Excel 템플릿에서 데이터 바인딩을 사용하면 데이터 소스를 사용해 PDF 양식 필드에 값을 지정할 수도 있습니다. 모든 고급 Excel 템플릿 데이터 바인딩 - C#은 새로운 PDF 양식 필드에서 작동하며 PDF 양식 필드 셀에서 초기 값을 지정할 수 있습니다. 한 가지 예시는 다음과 같이 주소록을 만드는 textbox 필드에 대한 새로운 데모 샘플에 포함되어 있습니다.


그림 1 - 주소록을 위한 textbox PDF 양식 필드 샘플 Excel 템플릿:

주소록을 위한 textbox PDF 양식 필드 샘플 Excel 템플릿


이 샘플에서는 데이터 바인딩 기능을 사용해 표의 셀에 값을 채웁니다. 또한 textbox PDF 양식 필드를 사용해 PDF의 값을 편집할 수 있습니다. 관련 코드는 다음과 같습니다.


NET C# 코드

//create a new workbook
var workbook = new GrapeCity.Documents.Excel.Workbook();
​
//Load template file from resource
var templateFile = this.GetResourceStream("xlsx\\Template_TextFields.xlsx");
workbook.Open(templateFile);
​
#region Init Data
var datasource = new DataTable();
datasource.Columns.Add(new DataColumn("Name", typeof(string)));
datasource.Columns.Add(new DataColumn("Work", typeof(string)));
datasource.Columns.Add(new DataColumn("Cell", typeof(string)));
datasource.Columns.Add(new DataColumn("Home", typeof(string)));
datasource.Columns.Add(new DataColumn("Email", typeof(string)));
datasource.Columns.Add(new DataColumn("Birthday", typeof(string)));
datasource.Columns.Add(new DataColumn("Address", typeof(string)));
datasource.Columns.Add(new DataColumn("City", typeof(string)));
datasource.Columns.Add(new DataColumn("State", typeof(string)));
datasource.Columns.Add(new DataColumn("Zip", typeof(string)));
​
datasource.Rows.Add("Kim Abercrombie", "1235550123", "1235550123", "1235550123", "Kim@example.com", "4/13/1991", "123 N. Maple", "Cherryville", "WA", "98031");
datasource.Rows.Add("John Smith", "3215230123", "3215230123", "3215230123", "John@example.com", "5/20/1990", "4456 E. Aspen", "Montgomery", "AL", "36136");
datasource.Rows.Add("James Williams", "5235550879", "5235550879", "5235550879", "James@example.com", "4/5/1995", "123 N. Maple", "Denver", "CO", "80214");
datasource.Rows.Add("Mark Jordan", "1238640185", "1238640185", "1238640185", "Mark@example.com", "12/13/1988", "123 N. Maple", "Boise", "ID", "83706");
datasource.Rows.Add("Andrew Lepp", "6235320178", "6235320178", "6235320178", "Andrew@example.com", "10/9/1996", "123 N. Maple", "Augusta", "ME", "04336");
#endregion
​
//Add data source
workbook.AddDataSource("ds", datasource);
​
//Invoke to process the template
workbook.ProcessTemplate();
​
//save to a pdf file
workbook.Save("textfields.pdf");


.NET VB 코드

' Create a new Workbook
Dim workbook As New Workbook
'Load template file from resource
Dim templateFile = GetResourceStream("xlsx\Template_TextFields.xlsx")
workbook.Open(templateFile)
​
#Region "Init Data"
Dim datasource As New DataTable
With datasource.Columns
  .Add(New DataColumn("Name", GetType(String)))
  .Add(New DataColumn("Work", GetType(String)))
  .Add(New DataColumn("Cell", GetType(String)))
  .Add(New DataColumn("Home", GetType(String)))
  .Add(New DataColumn("Email", GetType(String)))
  .Add(New DataColumn("Birthday", GetType(String)))
  .Add(New DataColumn("Address", GetType(String)))
  .Add(New DataColumn("City", GetType(String)))
  .Add(New DataColumn("State", GetType(String)))
  .Add(New DataColumn("Zip", GetType(String)))
End With
​
With datasource.Rows
  .Add("Kim Abercrombie", "1235550123", "1235550123", "1235550123", "Kim@example.com", "4/13/1991", "123 N. Maple", "Cherryville", "WA", "98031")
  .Add("John Smith", "3215230123", "3215230123", "3215230123", "John@example.com", "5/20/1990", "4456 E. Aspen", "Montgomery", "AL", "36136")
  .Add("James Williams", "5235550879", "5235550879", "5235550879", "James@example.com", "4/5/1995", "123 N. Maple", "Denver", "CO", "80214")
  .Add("Mark Jordan", "1238640185", "1238640185", "1238640185", "Mark@example.com", "12/13/1988", "123 N. Maple", "Boise", "ID", "83706")
  .Add("Andrew Lepp", "6235320178", "6235320178", "6235320178", "Andrew@example.com", "10/9/1996", "123 N. Maple", "Augusta", "ME", "04336")
End With
#End Region
​
'Add data source
workbook.AddDataSource("ds", datasource)
​
'Invoke to process the template
workbook.ProcessTemplate()
​
' save to a pdf file
workbook.Save("textfields.pdf")


Java 코드

//create a new workbook
Workbook workbook = new Workbook();
// Load template file from resource
InputStream templateFile = this.getResourceStream("xlsx/Template_TextFields.xlsx");
workbook.open(templateFile);
​
// #region Init Data
List<AddressBook> addressBooks = new ArrayList<AddressBook>();
​
AddressBook addressBook1 = new AddressBook();
addressBook1.name = "Kim Abercrombie";
addressBook1.work = "1235550123";
addressBook1.cell = "1235550123";
addressBook1.home = "1235550123";
addressBook1.email = "Kim@example.com";
addressBook1.birthday = "4/13/1991";
addressBook1.address = "123 N. Maple";
addressBook1.city = "Cherryville";
addressBook1.state = "WA";
addressBook1.zip = "98031";
addressBooks.add(addressBook1);
​
AddressBook addressBook2 = new AddressBook();
addressBook2.name = "John Smith";
addressBook2.work = "3215230123";
addressBook2.cell = "3215230123";
addressBook2.home = "3215230123";
addressBook2.email = "John@example.com";
addressBook2.birthday = "5/20/1990";
addressBook2.address = "4456 E. Aspen";
addressBook2.city = "Montgomery";
addressBook2.state = "AL";
addressBook2.zip = "36136";
addressBooks.add(addressBook2);
​
AddressBook addressBook3 = new AddressBook();
addressBook3.name = "James Williams";
addressBook3.work = "5235550879";
addressBook3.cell = "5235550879";
addressBook3.home = "5235550879";
addressBook3.email = "James@example.com";
addressBook3.birthday = "4/5/1995";
addressBook3.address = "123 N. Maple";
addressBook3.city = "Denver";
addressBook3.state = "CO";
addressBook3.zip = "80214";
addressBooks.add(addressBook3);
​
AddressBook addressBook4 = new AddressBook();
addressBook4.name = "Mark Jordan";
addressBook4.work = "1238640185";
addressBook4.cell = "1238640185";
addressBook4.home = "1238640185";
addressBook4.email = "Mark@example.com";
addressBook4.birthday = "12/13/1988";
addressBook4.address = "123 N. Maple";
addressBook4.city = "Boise";
addressBook4.state = "ID";
addressBook4.zip = "83706";
addressBooks.add(addressBook4);
​
AddressBook addressBook5 = new AddressBook();
addressBook5.name = "Andrew Lepp";
addressBook5.work = "6235320178";
addressBook5.cell = "6235320178";
addressBook5.home = "6235320178";
addressBook5.email = "Andrew@example.com";
addressBook5.birthday = "10/9/1996";
addressBook5.address = "123 N. Maple";
addressBook5.city = "Augusta";
addressBook5.state = "ME";
addressBook5.zip = "04336";
addressBooks.add(addressBook5);
// #endregion
​
// Add data source
workbook.addDataSource("ds", addressBooks);
​
// Invoke to process the template
workbook.processTemplate();
​
//save to an pdf file
workbook.save("TextFields.pdf");


Kotlin 코드

//create a new workbook
var workbook = Workbook()
// Load template file from resource
val templateFile = this.getResourceStream("xlsx/Template_TextFields.xlsx")
workbook.open(templateFile)
​
// #region Init Data
val addressBooks = ArrayList<AddressBook>()
​
val addressBook1 = AddressBook()
addressBook1.name = "Kim Abercrombie"
addressBook1.work = "1235550123"
addressBook1.cell = "1235550123"
addressBook1.home = "1235550123"
addressBook1.email = "Kim@example.com"
addressBook1.birthday = "4/13/1991"
addressBook1.address = "123 N. Maple"
addressBook1.city = "Cherryville"
addressBook1.state = "WA"
addressBook1.zip = "98031"
addressBooks.add(addressBook1)
​
val addressBook2 = AddressBook()
addressBook2.name = "John Smith"
addressBook2.work = "3215230123"
addressBook2.cell = "3215230123"
addressBook2.home = "3215230123"
addressBook2.email = "John@example.com"
addressBook2.birthday = "5/20/1990"
addressBook2.address = "4456 E. Aspen"
addressBook2.city = "Montgomery"
addressBook2.state = "AL"
addressBook2.zip = "36136"
addressBooks.add(addressBook2)
​
val addressBook3 = AddressBook()
addressBook3.name = "James Williams"
addressBook3.work = "5235550879"
addressBook3.cell = "5235550879"
addressBook3.home = "5235550879"
addressBook3.email = "James@example.com"
addressBook3.birthday = "4/5/1995"
addressBook3.address = "123 N. Maple"
addressBook3.city = "Denver"
addressBook3.state = "CO"
addressBook3.zip = "80214"
addressBooks.add(addressBook3)
​
val addressBook4 = AddressBook()
addressBook4.name = "Mark Jordan"
addressBook4.work = "1238640185"
addressBook4.cell = "1238640185"
addressBook4.home = "1238640185"
addressBook4.email = "Mark@example.com"
addressBook4.birthday = "12/13/1988"
addressBook4.address = "123 N. Maple"
addressBook4.city = "Boise"
addressBook4.state = "ID"
addressBook4.zip = "83706"
addressBooks.add(addressBook4)
​
val addressBook5 = AddressBook()
addressBook5.name = "Andrew Lepp"
addressBook5.work = "6235320178"
addressBook5.cell = "6235320178"
addressBook5.home = "6235320178"
addressBook5.email = "Andrew@example.com"
addressBook5.birthday = "10/9/1996"
addressBook5.address = "123 N. Maple"
addressBook5.city = "Augusta"
addressBook5.state = "ME"
addressBook5.zip = "04336"
addressBooks.add(addressBook5)
// #endregion
​
// Add data source
workbook.addDataSource("ds", addressBooks)
​
// Invoke to process the template
workbook.processTemplate()
​
//save to an pdf file
workbook.save("TextFields.pdf")


위 코드는 Excel 템플릿 통합 문서를 연 후 템플릿 셀에 바인딩할 주소 값이 포함된 데이터 소스를 만들어 추가하고, 끝으로 템플릿을 처리하고 PDF를 저장합니다.


그림 2 - GcPdfViewer에 표시된 편집 가능한 주소록 PDF 양식:

GcPdfViewer에 표시된 편집 가능한 주소록 PDF 양식



PDF 양식 필드용 포함된 글꼴


기본적으로 PDF 양식 필드에 지정된 글꼴은 PDF에 포함됩니다. 글꼴을 포함하면 사용자가 양식 필드에 자유롭게 입력할 수 있게 해주는 모든 글리프가 제공되며, 이 글리프를 통해 사용자의 입력을 렌더링할 수 있습니다.


하지만 전체 글꼴을 포함하면 파일 크기가 상당히 커질 수 있습니다.


특히 다양한 언어를 위한 여러 가지 문자 집합이 포함된 몇 가지 일반적인 유니코드와 아시아 글꼴의 경우 그렇습니다. 파일이 너무 커지지 않도록 하려면 글로벌 옵션인 TemplateOptions.EmbedFontForFormFields를 사용해 GrapeCity Documents for Excel v3.2로 만든 PDF 양식 필드에 대해 글꼴을 포함하고 싶지 않다고 Excel 템플릿에 명시하면 됩니다.


이 글로벌 옵션은 통합 문서 수준 이름을 사용해 Excel 템플릿 통합 문서에 지정됩니다.


NET C# 코드

//Init template global settings
workbook.Names.Add("TemplateOptions.EmbedFontForFormFields", "false");


.NET VB 코드

//Init template global settings
workbook.Names.Add("TemplateOptions.EmbedFontForFormFields", "false")


Java 코드

//Init template global settings
workbook.getNames().add("TemplateOptions.EmbedFontForFormFields", "false");


Kotlin 코드

//Init template global settings
workbook.getNames().add("TemplateOptions.EmbedFontForFormFields", "false")



예시 PDF 양식: 미국 세금 양식 W-4

그림 3 - 미국 세금 양식 W-4:

미국 세금 양식 W-4


채울 수 있는 미국 세금 양식 W-4를 만드는 이 예시는 GrapeCity Documents for Excel v3.2용 새로운 데모 샘플(.NET의 경우 여기, Java/Kotlin의 경우 여기)에서 찾을 수 있습니다.


이 예시에서는 위에 표시된 Excel 템플릿을 사용해 PDF 양식 필드를 만듭니다. 이 템플릿은 "템플릿 다운로드" 버튼을 사용해 데모(.NET의 경우 여기, Java의 경우 여기)에서 다운로드할 수 있습니다. 


콧수염 구문을 사용해 필드에 대한 속성을 지정하는 PDF 양식 필드 셀을 템플릿에서 볼 수 있습니다. 다음과 같이 B7 셀에 첫 번째 textbox PDF 양식 필드가 표시됩니다.

{{(form={"type": "textbox", "name": "First&Middle Name", "font":{"bold":true, "color": "#362EA2"}})}}


이것은 First&Middle Name이라는 textbox색상이 진한 파란색을 띤 보라색이고 텍스트가 굵게 표시된 글꼴로 지정합니다. 다른 textbox 필드는 Last Name의 경우 셀 I7, Social Security Number의 경우 O7, Address의 경우 B9, Address2(도시, 주, 우편번호)의 경우 B11에 표시됩니다.


이어서 셀 C12에는 다음과 같이 첫 번째 checkbox 필드가 표시됩니다.


{{(form={"type": "checkbox", "name": "Single","border": {"color": "#000000"}})}}이것은 테두리가 검은색인 Single이라는 checkbox를 지정합니다. C13(Married), C14(HouseHold), S23(TwoJobs) 셀에는 다른 checkbox 필드가 있습니다.


실제 US W-4와 마찬가지로 이 예시에서는 서명 필드를 사용하지 않지만, 사용한다고 가정하면 셀 B46에 다음과 같이 지정됩니다.


{{(form={"type": "signature", "name": "Employee's Signature", "font":{"bold":true, "color": "#362EA2"}})}}


템플릿 스프레드시트에서 미국 W-4 세금 양식을 만들 수 있는 코드는 다음과 같습니다.


NET C# 코드

//create a new workbook
var workbook = new GrapeCity.Documents.Excel.Workbook();
​
//Load template file from resource
var templateFile = this.GetResourceStream("xlsx\\Template_fw4-USTaxForm.xlsx");
workbook.Open(templateFile);
​
//Invoke to process the template
workbook.ProcessTemplate();
​
//save to a pdf file
workbook.Save("ustaxform_fw4.pdf");


.NET VB 코드

' Create a new Workbook
Dim workbook As New Workbook
'Load template file from resource
Dim templateFile = GetResourceStream("xlsx\Template_fw4-USTaxForm.xlsx")
workbook.Open(templateFile)
​
​
'Invoke to process the template
workbook.ProcessTemplate()
​
' save to a pdf file
workbook.Save("ustaxform_fw4.pdf")


Java 코드

//create a new workbook
Workbook workbook = new Workbook();
//Load template file from resource
InputStream templateFile = this.getResourceStream("xlsx/Template_fw4-USTaxForm.xlsx");
workbook.open(templateFile);
​
//Invoke to process the template
workbook.processTemplate();
​
//save to an pdf file
workbook.save("USTaxForm_fw4.pdf");


Kotlin 코드

//create a new workbook
var workbook = Workbook()
//Load template file from resource
val templateFile = this.getResourceStream("xlsx/Template_fw4-USTaxForm.xlsx")
workbook.open(templateFile)
​
//Invoke to process the template
workbook.processTemplate()
​
//save to an pdf file
workbook.save("USTaxForm_fw4.pdf")


그림 4 - GcPdfViewer에 표시된 미국 W-4 세금 양식:

GcPdfViewer에 표시된 미국 W-4 세금 양식


이 데모 샘플은 .NET과 Java 버전용 Excel 데모를 위한 새로운 GrapeCity 문서인 미국 세금 양식 예시 .NET미국 세금 양식 예시 Java에서 제공됩니다.

  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

인기글

더보기
  • 인기 게시물이 없습니다.
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.