You've already forked lazarus-ccr
fpspreadsheet: xlsx reader adds header/footer images to PageLayout.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8335 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
<LRSInOutputDirectory Value="False"/>
|
||||
<CompatibilityMode Value="True"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="demo_read_headerfooter_images"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
</General>
|
||||
<BuildModes Count="1">
|
||||
<Item1 Name="default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
|
||||
</local>
|
||||
<FormatVersion Value="2"/>
|
||||
<Modes Count="1">
|
||||
<Mode0 Name="default">
|
||||
<local>
|
||||
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
|
||||
</local>
|
||||
</Mode0>
|
||||
</Modes>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="1">
|
||||
<Item1>
|
||||
<PackageName Value="LazUtils"/>
|
||||
</Item1>
|
||||
</RequiredPackages>
|
||||
<Units Count="1">
|
||||
<Unit0>
|
||||
<Filename Value="demo_read_headerfooter_images.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="demo_read_headerfooter_images"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="..\..\..\source"/>
|
||||
<OtherUnitFiles Value="..\..\..\source\common"/>
|
||||
<UnitOutputDirectory Value="..\..\lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<UseAnsiStrings Value="False"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
<UseExternalDbgSyms Value="True"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
</CONFIG>
|
@ -0,0 +1,98 @@
|
||||
program demo_read_headerfooter_images;
|
||||
|
||||
{$mode delphi}{$H+}
|
||||
|
||||
uses
|
||||
Classes, SysUtils, fpstypes, fpspreadsheet, fpsallformats, fpsutils,
|
||||
fpsImages, fpsPageLayout;
|
||||
|
||||
var
|
||||
workbook: TsWorkbook;
|
||||
worksheet: TsWorksheet;
|
||||
i: Integer;
|
||||
hfs: TsHeaderFooterSectionIndex;
|
||||
img: TsEmbeddedObj;
|
||||
|
||||
const
|
||||
FILE_NAME = 'hfimg';
|
||||
|
||||
function hfsToStr(idx: TsHeaderFooterSectionIndex): String;
|
||||
begin
|
||||
case idx of
|
||||
hfsLeft: Result := 'left';
|
||||
hfsCenter: Result := 'center';
|
||||
hfsRight: Result := 'right';
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
Writeln('Starting program "demo_read_headerfooter_images"...');
|
||||
WriteLn;
|
||||
|
||||
// Create the spreadsheet
|
||||
workbook := TsWorkbook.Create;
|
||||
try
|
||||
workbook.ReadFromFile(FILE_NAME + '.xlsx', sfOOXML);
|
||||
|
||||
for i := 0 to workbook.GetWorksheetCount-1 do
|
||||
begin
|
||||
worksheet := workbook.GetWorksheetByIndex(i);
|
||||
WriteLn('Worksheet "', worksheet.Name, '", PageLayout:');
|
||||
WriteLn(' HeaderMargin: ', worksheet.Pagelayout.HeaderMargin:6:1, ' mm');
|
||||
WriteLn(' TopMargin : ', worksheet.Pagelayout.TopMargin:6:1, ' mm');
|
||||
WriteLn(' Headers:');
|
||||
WriteLn(' first page: ', worksheet.PageLayout.Headers[0]);
|
||||
WriteLn(' odd or all pages: ', worksheet.PageLayout.Headers[1]);
|
||||
WriteLn(' even pages:', worksheet.PageLayout.Headers[2]);
|
||||
for hfs in TsHeaderFooterSectionIndex do
|
||||
begin
|
||||
Write(' Images ', hfsToStr(hfs), ': ');
|
||||
if worksheet.PageLayout.HeaderImages[hfs].Index = -1 then
|
||||
WriteLn('(none)')
|
||||
else
|
||||
begin
|
||||
img := workbook.GetEmbeddedObj(worksheet.PageLayout.HeaderImages[hfs].Index);
|
||||
if img = nil then
|
||||
WriteLn('image not found')
|
||||
else
|
||||
WriteLn(img.FileName);
|
||||
end;
|
||||
end;
|
||||
WriteLn(' Footers:');
|
||||
WriteLn(' first page: ', worksheet.PageLayout.Footers[0]);
|
||||
WriteLn(' odd or all pages: ', worksheet.PageLayout.Footers[1]);
|
||||
WriteLn(' even pages: ', worksheet.PageLayout.Footers[2]);
|
||||
for hfs in TsHeaderFooterSectionIndex do
|
||||
begin
|
||||
Write (' Images ', hfsToStr(hfs), ': ');
|
||||
if worksheet.PageLayout.FooterImages[hfs].Index = -1 then
|
||||
WriteLn('(none)')
|
||||
else
|
||||
begin
|
||||
img := workbook.GetEmbeddedObj(worksheet.PageLayout.FooterImages[hfs].Index);
|
||||
if img = nil then
|
||||
WriteLn('image not found')
|
||||
else
|
||||
WriteLn(img.FileName);
|
||||
end;
|
||||
end;
|
||||
WriteLn;
|
||||
end;
|
||||
|
||||
if workbook.ErrorMsg <> '' then
|
||||
WriteLn(workbook.ErrorMsg);
|
||||
|
||||
WriteLn('Finished.');
|
||||
if ParamCount = 0 then
|
||||
begin
|
||||
{$IFDEF MSWINDOWS}
|
||||
WriteLn('Press [ENTER] to close this program...');
|
||||
ReadLn;
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
finally
|
||||
workbook.Free;
|
||||
end;
|
||||
end.
|
||||
|
@ -402,7 +402,7 @@ type
|
||||
FromRow, FromCol, ToRow, ToCol: Cardinal;
|
||||
FromRowOffs, FromColOffs, ToRowOffs, ToColOffs: Double;
|
||||
// This part is for header/footer images.
|
||||
// ... to be completed ...
|
||||
HFImgPosition: string; // 'LH', 'CH', 'RH', 'LF', 'CF', 'RF';
|
||||
end;
|
||||
|
||||
THyperlinkListData = class
|
||||
@ -2662,6 +2662,7 @@ var
|
||||
w, h: Double;
|
||||
img: TsEmbeddedObj;
|
||||
scaleX, scaleY: Double;
|
||||
pageIdx: Integer;
|
||||
begin
|
||||
doc := nil;
|
||||
j := 1;
|
||||
@ -2719,7 +2720,24 @@ begin
|
||||
img := TsWorkbook(FWorkbook).GetEmbeddedObj(data.ImgIndex);
|
||||
if data.IsHeaderFooter then
|
||||
begin
|
||||
// to do: add header/footer processing here.
|
||||
if data.HFImgPosition <> '' then
|
||||
begin
|
||||
pageIdx := HEADER_FOOTER_INDEX_ALL; // wp: Don't know which is the correct index...
|
||||
case data.HFImgPosition[2] of
|
||||
'H':
|
||||
case data.HFImgPosition[1] of
|
||||
'L': sheet.PageLayout.AddHeaderImage(pageIdx, hfsLeft, data.ImgIndex);
|
||||
'C': sheet.PageLayout.AddHeaderImage(pageIdx, hfsCenter, data.ImgIndex);
|
||||
'R': sheet.PageLayout.AddHeaderImage(pageIdx, hfsRight, data.ImgIndex);
|
||||
end;
|
||||
'F':
|
||||
case data.HFImgPosition[1] of
|
||||
'L': sheet.PageLayout.AddFooterImage(pageIdx, hfsLeft, data.ImgIndex);
|
||||
'C': sheet.PageLayout.AddFooterImage(pageIdx, hfsCenter, data.ImgIndex);
|
||||
'R': sheet.PageLayout.AddFooterImage(pageIdx, hfsRight, data.ImgIndex);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end else
|
||||
begin
|
||||
w := -data.FromColOffs + data.ToColOffs;
|
||||
@ -4030,13 +4048,18 @@ var
|
||||
relID: String;
|
||||
title: String;
|
||||
data: TEmbeddedObjData;
|
||||
id: String;
|
||||
begin
|
||||
ANode := ANode.FirstChild;
|
||||
while Assigned(ANode) do
|
||||
begin
|
||||
id := '';
|
||||
relID := '';
|
||||
title := '';
|
||||
nodeName := ANode.NodeName;
|
||||
if nodeName = 'v:shape' then
|
||||
begin
|
||||
id := GetAttrValue(ANode, 'id');
|
||||
node := ANode.FirstChild;
|
||||
while Assigned(node) do
|
||||
begin
|
||||
@ -4065,6 +4088,7 @@ begin
|
||||
data.ImgIndex := -1;
|
||||
data.Worksheet := AWorksheet;
|
||||
data.IsHeaderFooter := true;
|
||||
data.HFImgPosition := id;
|
||||
FEmbeddedObjList.Add(data);
|
||||
end;
|
||||
end;
|
||||
|
Reference in New Issue
Block a user