FB3-Convert

 view release on metacpan or  search on metacpan

bin/fb3_to_fb2.pl  view on Meta::CPAN

  $NewImgId =~ s/^_//;
  if ($ImgType =~ /\/(.+)$/) {
    $NewImgId .= '.'.$1 unless $NewImgId =~ /\.(png|gif|jpg|jpeg)$/;
  }

  $Img->{NewId} = $ImgRels{$Img->{'Id'}} = $NewImgId;

  next if exists $ImgReverse{$NewImgId}; #иногда описания картинок совпадают. например обложка залетает дважды из описаний
  $ImgReverse{$NewImgId} = 1;

  push @FB2ImgXML, '<binary content-type="'.$ImgType.'" id="'.$NewImgId.'">'.MIME::Base64::encode($ImgContent).'</binary>';
}

#работаем с DESCRIPTION
my $DescrXML = $FB3Package->PartContents($DescrRelsPartName);
my $xc = XML::LibXML::XPathContext->new($Parser->parse_string($DescrXML)); 
$xc->registerNs('fb3', &NS_FB3_DESCRIPTION); 


#запихаем в xml данные обложки
if ($Img[0]->{'IsCover'} &&  (my $RootDescr = $xc->findnodes("/fb3:fb3-description")->[0]) ){

lib/FB3/Convert/Epub.pm  view on Meta::CPAN

  <Relationship Id="rId0" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail" Target="fb3/$CoverSrc"/>} : '' ).qq{
  <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="fb3/meta/core.xml"/>
  <Relationship Id="rId2" Type="http://www.fictionbook.org/FictionBook3/relationships/Book" Target="fb3/description.xml"/>
  </Relationships>};
  close FHrels;

  $X->Msg("FB3: Create [Content_Types].xml\n","w");
  my $FNct="$FB3Path/[Content_Types].xml";
  open FHct, ">$FNct" or $X->Error("$FNct: $!");
  print FHct qq{<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
   	<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />
   	<Default Extension="png" ContentType="image/png"/>
   	<Default Extension="jpg" ContentType="image/jpeg"/>
    <Default Extension="jpeg" ContentType="image/jpeg"/>
   	<Default Extension="gif" ContentType="image/gif"/>
   	<Default Extension="svg" ContentType="image/svg+xml"/>
   	<Default Extension="xml" ContentType="application/xml"/>
   	<Default Extension="css" ContentType="text/css"/>
   	<Override PartName="/fb3/meta/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/>
   	<Override PartName="/fb3/description.xml" ContentType="application/fb3-description+xml"/>

lib/FB3/Convert/FB2.pm  view on Meta::CPAN

	  $CoverID=lc($CoverNode->getAttribute('l:href'));
	  $CoverID=~s/^#//;
	}

	my $ImagesFound = 0;
	for ($XPC->findnodes('/fb:FictionBook/fb:binary',$FB2Doc)) {
	  $ImagesFound = 1;

	  my $id=$_->getAttribute('id');
	  $X->Msg("Converting image '$id'...\n");
	  my $ContentType=$_->getAttribute('content-type');

	  if (defined($id) && $ContentType=~ /image\/(jpeg|png)/i) {
	    my $FN="$FB3Path/fb3/img/".lc($id);
	    open IMGFILE, ">$FN" or die "$FN: $!";
	    binmode IMGFILE;
	    print (IMGFILE decode_base64($_->string_value()));
	    close IMGFILE;

	  } elsif (defined($id) && $ContentType=~ /image\/gif/i) {
	    $!=18;

lib/FB3/Convert/FB2.pm  view on Meta::CPAN

	  print FH $SheetNode->string_value;
	  close FH;
	}
	$X->Msg("Stylesheets extracted successfully.") if $SheetCount > 0;

	#compile required files
	my $FN="$FB3Path/[Content_Types].xml";
	open FH, ">$FN" or die "$FN: $!";
	print FH <<EOF;
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
	<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />
	<Default Extension="png" ContentType="image/png"/>
	<Default Extension="jpg" ContentType="image/jpeg"/>
	<Default Extension="jpeg" ContentType="image/jpeg"/>
	<Default Extension="gif" ContentType="image/gif"/>
	<Default Extension="svg" ContentType="image/svg+xml"/>
	<Default Extension="xml" ContentType="application/xml"/>
	<Default Extension="css" ContentType="text/css"/>

	<Override PartName="/fb3/meta/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/>

t/examples/fb2/hell_example_133321.fb2  view on Meta::CPAN

</title><p><strong>[Очень длинный комментарий (6 абзацев)] </strong>Фаза свободна. Согласно данным Фонда "Общественное мнение", эстетическое воздейств...
<p>Фонон основан на. Стимулирование коммьюнити дает индикатор, осознав маркетинг как часть производства. Еще в ранних работах Л.Д.Ландау Ð...
<p>Комплекс агрессивности определяет зенит, хотя, например, шариковая ручка, продающаяся в Тауэре с изображением стражников Тауэра и памÑ...
<p>Ð’ соответствии с законами сохранения энергии, воздействие повышает экваториальный предмет деятельности, вне зависимости от предсказÐ...
<p>Говорят также о фактуре, типичной для тех или иных жанров ("фактура походного марша", "фактура вальса" и пр.), и здесь мы видим, что управлÐ...
<p>Стих испаряет распространенный рекламный блок, отрицая очевидное. Ритмоединица, как бы это ни казалось парадоксальным, фонетически уч...
</section> <section id="c_6"><title><p>6</p>
</title><p><strong>[Комментарий] </strong>Даже если учесть разреженный газ, заполняющий пространство между звездами, то все равно Южное полушарие неÑ...
</section> <section id="c_7"><title><p>7</p>
</title><p><strong>[Комментарий] </strong>Кульминация дискретно представляет собой агробиогеоценоз, но если бы песен было раз в пять меньше, было бы Ð...
</section> </section> </body> <binary content-type="image/jpeg" id="_1001000.jpg">/9j/4AAQSkZJRgABAQEAeAB4AAD/4QEARXhpZgAATU0AKgAAAAgABQEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAAExAAIAAAASAAAAWodpAAQAAAABAAAAbAAAAAAAAAB4AAAAAQAAAHgAAAABUGFpbnQu...

t/examples/fb3_to_fb2/author_exists_193286.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8"?>
<FictionBook xmlns:ltr="LTR" xmlns:fb3d="http://www.fictionbook.org/FictionBook3/description" xmlns:l="http://www.w3.org/1999/xlink" xmlns:fb3b="http://www.fictionbook.org/FictionBook3/body" xmlns="http://www.gribuser.ru/xml/fictionbook/2.0"><descrip...
    
      <image l:href="#img_9b6c0870-4d8d-5aa3-992a-72509e62d9c9" alt=""/>
    <empty-line/>
    <p>January/February 2015</p>
    <p>Vol. 13, No. 1</p>
  </section></body><binary content-type="image/jpeg" id="cover.jpg"></binary></FictionBook>

t/examples/fb3_to_fb2/author_not_exists_193286.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8"?>
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:ltr="LTR" xmlns:fb3d="http://www.fictionbook.org/FictionBook3/description" xmlns:fb3b="http://www.fictionbook.org/FictionBook3/body" xmlns:l="http://www.w3.org/1999/xlink"><descrip...
    
      <image l:href="#img_9b6c0870-4d8d-5aa3-992a-72509e62d9c9" alt=""/>
    <empty-line/>
    <p>January/February 2015</p>
    <p>Vol. 13, No. 1</p>
  </section></body><binary content-type="image/jpeg" id="cover.jpg"></binary></FictionBook>

t/examples/fb3_to_fb2/clipped_section_190994.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8"?>
<FictionBook xmlns:fb3b="http://www.fictionbook.org/FictionBook3/body" xmlns:ltr="LTR" xmlns:l="http://www.w3.org/1999/xlink" xmlns:fb3d="http://www.fictionbook.org/FictionBook3/description" xmlns="http://www.gribuser.ru/xml/fictionbook/2.0"><descrip...
    <p>&amp;lt;p&amp;gt;konwersja Ginter Lopez, ginter3.republika.pl, lopi333@gmail.com&amp;lt;/p&amp;gt;</p>
  </annotation><coverpage><image l:href="#fb3_img_img_10b9bb7f-ec93-5b21-85a8-2408ada12ef1.jpg"/></coverpage><lang>pl</lang><src-lang>pl</src-lang></title-info><document-info><author><nickname>Аноним</nickname></author><date value="2019-03-12">...
      <title>
        <p>Provider Barriers</p>
      </title>
	<p>text</p>
    </section></body><binary content-type="image/jpeg" id="fb3_img_img_10b9bb7f-ec93-5b21-85a8-2408ada12ef1.jpg"></binary></FictionBook>

t/examples/fb3_to_fb2/marker_156543.xml  view on Meta::CPAN

      
	<image l:href="#fb3_img_img_eaccff44-b0bd-570c-beeb-8e28643c3aca.jpg" alt="1"/>
	
      <p>Text1</p>
<empty-line/>

      <image l:href="#fb3_img_img_eaccff44-b0bd-570c-beeb-8e28643c3aca.jpg" alt="1"/><empty-line/>
      <p>Text2</p>

    </section>
  </section></body><binary content-type="image/jpeg" id="fb3_img_img_eaccff44-b0bd-570c-beeb-8e28643c3aca.jpg">/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/b
AIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgIC
AwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD
AwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgBLAEsAwERAAIRAQMRAf/EAGYAAQACAgMBAQAAAAAAAAAA
AAAJCgYHBAUIAwsBAQAAAAAAAAAAAAAAAAAAAAAQAQAABwEBAAMAAgMBAQAAAAABAgMEBQYHCAkR
EgoTFCEVFiQXEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwC/wAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

t/examples/fb3_to_fb2/p_in_title_147166.xml  view on Meta::CPAN

    <section id="u67423066-abce-4d80-b541-a763330d949d">
      <title>
        <p>
          <image l:href="#fb3_img_img_eaccff44-b0bd-570c-beeb-8e28643c3aca.jpg" alt="1"/>
           
        </p>
        <p>1. Kluczowa decyzja</p>
      </title>
      <p>W końcu się zdecydowałam.</p>
    </section>
  </section></body><binary content-type="image/jpeg" id="fb3_img_img_eaccff44-b0bd-570c-beeb-8e28643c3aca.jpg">/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/b
AIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgIC
AwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD
AwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgBLAEsAwERAAIRAQMRAf/EAGYAAQACAgMBAQAAAAAAAAAA
AAAJCgYHBAUIAwsBAQAAAAAAAAAAAAAAAAAAAAAQAQAABwEBAAMAAgMBAQAAAAABAgMEBQYHCAkR
EgoTFCEVFiQXEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwC/wAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

t/examples/fb3_to_fb2/same_img_cover_135705.xml  view on Meta::CPAN

<FictionBook xmlns:fb3b="http://www.fictionbook.org/FictionBook3/body" xmlns:l="http://www.w3.org/1999/xlink" xmlns:ltr="LTR" xmlns:fb3d="http://www.fictionbook.org/FictionBook3/description" xmlns="http://www.gribuser.ru/xml/fictionbook/2.0"><descrip...
    <p>Kogenud politseiuurija Jørn Lier Horsti uus põnevust täis kriminaalromaan. Rannamaastikku katab tihe sügisudu, pimedate akendega suvemajad kükitavad pliihalli mere ääres. Ove Bakkerudil seisab ees viimane rahulik nädalavahetus suvitusk...
  </annotation><coverpage><image l:href="#fb3_img_img_eb176a02-5bcd-5e8b-b077-133c34599d8f.jpg"/></coverpage><lang>et-EE</lang><src-lang>et-EE</src-lang></title-info><document-info><author><nickname>Аноним</nickname></author><date value="2018-1...
    
      <image l:href="#fb3_img_img_eb176a02-5bcd-5e8b-b077-133c34599d8f.jpg" alt="cover"/>
    <empty-line/>
  </section><section id="u42b9c6d6-2509-53d0-a862-b523888a6865">
    
      <image l:href="#fb3_img_img_9eabbfbe-ccdc-5fa5-a1d9-bb45d9131f41.jpg" alt="title"/>
    <empty-line/>
  </section></body><binary content-type="image/jpeg" id="fb3_img_img_eb176a02-5bcd-5e8b-b077-133c34599d8f.jpg">/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/b
AIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgIC
AwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD
AwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAMgAyAwERAAIRAQMRAf/EAFoAAQEBAQEAAAAAAAAAAAAA
AAAIBwkKAQEAAAAAAAAAAAAAAAAAAAAAEAABBAMBAAMBAAAAAAAAAAAGAAQFBwIDCAETFBYJEQEA
AAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwD38ICAgICAgICAgICAgICAgIJg6lMOpRsaA4Xk
irQA/sc9sRkKTJZbpI9gqmpUI1DRMSzlnHMYObsTw21+OB9tCxkLCY697uXmG2Th0yZ697jAM34M
6ZsvpEKu1jcYsAQVn859IH/NBsQVDOTM9T9kToGOg5K7OK0cEbfSQxsPh6c+QslGPtjtzEEcNJMs
3O/6/mzILnQEBAQEHPL+kVYd1XLTYzW/DRrWNfSpCdMcLxIje2DylDB9TGmOf+zobUdmV/SV5zIA
YmEjsbNt0/ojNElExvm/ONcN3+xu7ahp3DlaWdTNAwlT2TR/M/PTcAlHsDXda8p2Of2hWrMA9ZRk
lqmJMjsinaUJP3k6YSEw4lvkjX2TzZlg/wB8g5ePHXmoK/QEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
BB//2Q==
</binary><binary content-type="image/jpeg" id="fb3_img_img_9eabbfbe-ccdc-5fa5-a1d9-bb45d9131f41.jpg">/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/b
AIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgIC
AwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD
AwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAMgAyAwERAAIRAQMRAf/EAFkAAQEBAQAAAAAAAAAAAAAA
AAAIBwoBAQAAAAAAAAAAAAAAAAAAAAAQAAEEAwEBAQEBAAAAAAAAAAADBAUGAQIHCBETIgkRAQAA
AAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AO/gAAAAAAAAAAAAAAAAAAYz3rp9s5JziStVB4zf
u/3pV0zhKdy3ni1ejJOxWSWyojF4nLXb5WEqdEprRxrhSVnJBx+Mc0xtvok5Xyi1WDLvBPoqf9de
LfL/AKftVfh6pY+98UoPU5ms19Z64hIGQuME1mF4qMcSKir5dmy2c/npurtnffGv3Pz78wFbgAAA
AAAjj/PPzzdPJfhnyf5l6NJ1eavnCeEc55fbpakvZaRqMjP1Cus4iSeVx/OwlbmXcOu5b7bIKOmD
NbbTOM7paZ/nAWOAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2Q==
</binary></FictionBook>



( run in 0.619 second using v1.01-cache-2.11-cpan-524268b4103 )